2

Прежде чем отправлять какую-либо конфигурацию, я пытаюсь объяснить, что я хотел бы архивировать, и хотел бы упомянуть, что я новичок в докере.Создание веб-приложения, которое может выполнять задачи npm

Чтобы облегчить общение в разговорах, предположим, что мы говорим о проекте «Докажите меня!». и он находится в «X: \ docker-projects \ docker-me-up».

Цель:

Я хотел бы запустить несколько проект Nginx с различным содержанием, каждый проект представляет собой специальную сборку. Во время разработки [docker-compose up -d] контейнер должен обновляться мгновенно; который отлично работает.

Сложная часть заключается в том, что я хочу передать npm [http://gruntjs.com] с моего хоста непосредственно в контейнер/изображение, поэтому я могу отлаживать и развивать везде, где я есть, просто устанавливая докеры. Поэтому npm должен быть установлен в «службе», и наблюдатель должен быть инициализирован.

Каждый проект инкапсулирован в свою папку на хосте/сборке в докере и не должен знать ничего, кроме самого себя.

Мое решение:

Я пробовал много разных версий, с «volumes_from» и т.д., но я решил показать вам это, потому что это уменьшенная, но до сих пор завершена.

Докер-compose.yml

version: '2' 
services: 
    web: 
     image: nginx 
     volumes: 
      - ./assets:/website/assets:ro 
      - ./config:/website/config:ro 
      - ./www:/website/www:ro 
     links: 
      - php 
    php: 
     image: php:fpm 
     ports: 
      - "9000:9000" 
     volumes: 
      - ./assets:/website/assets:ro 
      - ./config:/website/config:ro 
      - ./www:/website/www:ro 
    app: 
     build: . 
     volumes: 
      - ./assets:/website/assets 
      - ./config:/website/config:ro 
      - ./www:/website/www 

Dockerfile

FROM debian:jessie-slim 
RUN apt-get update && apt-get install -y \ 
    npm 

RUN gem update --system 
RUN npm install -g grunt-cli grunt-contrib-watch grunt-babel babel-preset-es2015 

RUN mkdir -p /website/{assets,assets/es6,config,www,www/js,www/css} 

VOLUME /website 

WORKDIR /website 

Проблема:

Как вы можете видеть, сервис «данные» содержит НПМ и должны быть в состоянии выполнить команду npm. Но, если я запустил «docker-compose up -d», все будет работать. Я могу редактировать содержимое страницы, работать с ней и т. Д. Но контейнер данных не работает и из-за этого не может выполнять какую-либо команду npm. Если у меня не будет огромной логической ошибки; что вполне возможно ;-)

Окружающая среда:

  • для Windows 10 Pro [up2date]
  • Общий привод для докер используется
  • Docker версия 1.12.3, построить 6b644ec
  • докер-машина версия 0.8.2, сборка e18a919
  • версия для док-станции 1.8.1, построить 004ddae

ответ

1

После вызова docker-compose up, вы можете получить интерактивную оболочку для app контейнера с:

docker-compose run app 

Вы также можете запустить однократные команды с:

docker-compose run app [command] 

Причина, по которой ваш контейнер app не работает после завершения docker-compose up, заключается в том, что ваш Dockerfile не определяет службу. Для app, чтобы работать как сервис, вам нужно будет держать нить работает на переднем плане контейнера, добавляя что-то вроде:

CMD ./run-my-service 

до конца вашего Dockerfile.

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