2016-06-21 1 views
0

У меня есть docker-compose.yml файл со следующим содержанием:докер-компоновать вверх дает ошибку: Баш: парусов: команда не найдена

version: '2' 

services: 
MongoDB: 
    image: mongo 

Parrot-API: 
    build: ./Parrot-API 
    image: sails-js:dev 
    volumes: 
    - "/user/Code/node/Parrot-API:/host" 
    command: bash -c "cd /host && sails lift" 
    links: 
    - MongoDB:MongoDB 
    ports: 
    - "3050:1337" 

Файл в основном работает два контейнера: MongoDB и веб-приложение (в каталоге ./Parrot-API) встроенный в sails.js. Однако, когда я запускаю docker-compose up в терминале, я получил эту ошибку: Parrot-API_1 | bash: sails: команда не найдена node_Parrot-API_1 завершен кодом 127. Обратите внимание: sails.js является веб-каркасом node.js, а sails lift запускает приложение в порту 1337.

Я сделал несколько поисковых запросов Google и нашел некоторые подобные вопросы, но не помог в моем случае.

Кстати, у меня есть следующие Dockerfile в папке Parrot-API:

FROM sails-js:dev 
VOLUME /host 
WORKDIR /host 
RUN rm -rf node_modules && \ 
     echo "hello world!" && \ 
     pwd && \ 
     ls -lrah 
EXPOSE 1337 
CMD npm install -g sails && npm install && sails lift 

Структура файла выглядит следующим образом:

|- docker-compose.yml 
|- Parrot-API/Dockerfile 
|- Parrot-API/app.js, etc.. 

Это для меня ясно, что контейнер Parrot-API докер немедленно выходит из-за того, что команда sails lift не выполняется, но как сделать контейнер работать? Благодаря!

ответ

2

Вы показали файл docker-compose.yml, который создает изображение sails-js: dev, и вы показали файл Docker, основанный на изображении sails-js: dev. Это кажется рекурсивным.

Ваш Dockerfile сам по себе заканчивается CMD вместо ENTRYPOINT, который устанавливает установку парусов npm. Поскольку вы сделали это как CMD вместо RUN, паруса не установлены на вашем изображении, установка запускается при запуске контейнера, но только если вы не запускаете контейнер с любыми аргументами, как вы делаете в файле docker-compose.yml с пользовательской командой.

Исправление состоит в том, чтобы обновить файл Docker с правильным базовым изображением и сменить CMD на RUN. Я также вижу несколько других ошибок, таких как создание тома, а затем изменение содержимого, когда тома игнорируют другие изменения после их создания. FROM node - это всего лишь предположение, основанное на ваших командах npm, не стесняйтесь настраивать:

FROM node 
RUN mkdir -p /host && cd /host && npm install -g sails && npm install 
EXPOSE 1337 
WORKDIR /host 
VOLUME /host 
CMD sails lift 
Смежные вопросы