2016-10-24 16 views
2

Я пытаюсь настроить контейнер для реагирования приложения. Моя цель - использовать docker-compose (я хочу выполнить одну команду и все работает)docker compose vs docker run - контейнер узла

Проблема в том, что когда я пытаюсь сделать это с помощью файла docker-compose and docker (ниже), я получаю информацию о том, что :

докер-compose.yml

version: '2' 
services: 
react: 
    build: ./images/react 
    ports: 
     - "3000:3000" 
    volumes: 
     - "/home/my/path:/app" 

Dockerfile

FROM node:6.9 

WORKDIR /app 

RUN npm install 

EXPOSE 3000 

CMD [ "npm", "start" ] 

Результат

НПМ не WARN ENOENT ENOENT: нет такого файла или каталога, откройте '/app/package.json'

Но когда я сделал это с докер выполнения и объемы отображения I смог увидеть package.json и запустить команду установки npm.

docker run -it --rm -v /home/my/path:/app node:6.9 bash 

Почему он не работает с докером?

ответ

5

Обратите внимание, что объем, который вы описываете в файле docker-compose.yml будет установлен на время выполнения, а не во время сборки. Это означает, что при создании изображения не будет никакого файла package.json (пока), из которого вы можете установить свои зависимости.

Когда run нин контейнер изображения с -v /home/my/path:/app, вы на самом деле установки каталога первый, и последующие npm install вызовы завершится успешно.

Если вы собираетесь установить приложение (включая package.json) в контейнер, то npm install должно произойти во время выполнения (CMD), а не во время сборки (RUN).

Самый простой способ сделать это было бы просто добавить npm install заявление в вашей CMD инструкции (и падение RUN npm install инструкции):

CMD npm install && npm start 
+0

Великий ответ спасибо! – Purzynski

Смежные вопросы