Создание веб-приложения, которое может выполнять задачи npm
Прежде чем опубликовать какую-либо конфигурацию, я пытаюсь объяснить, что я хотел бы заархивировать, и хочу упомянуть, что я новичок в докере.
Чтобы облегчить разговор о путях, давайте предположим, что мы поговорим о проекте "Docker me up!" и он находится в "X:\docker-projects\docker-me-up\".
Цель:
Я хотел бы запустить несколько проектов nginx с различным содержанием, каждый проект представляет собой отдельную сборку. Во время разработки [docker-compose up -d] контейнер должен обновляться мгновенно; который отлично работает
Сложность заключается в том, что я хочу передать npm [ http://gruntjs.com%5D со своего хоста прямо в контейнер / образ, поэтому я могу отлаживать и разрабатывать, где бы я ни находился, просто установив docker. Следовательно, npm должен быть установлен в "сервисе", а наблюдатель должен быть инициализирован.
Каждый проект инкапсулирован в свою собственную папку на хосте / сборке в Docker и не должен иметь никаких знаний о чем-либо еще, кроме себя.
Мое решение:
Я пробовал много разных версий, с "volume_from" и т. Д., Но я решил показать вам это, потому что он минимизирован, но все еще завершен.
Docker-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
Проблема:
Как видите, служба "data" содержит npm и должна иметь возможность выполнить команду npm. Но если я запускаю "docker-compose up -d", все работает. Я могу редактировать содержимое страницы, работать с ним и т. Д. Но контейнер данных не работает и поэтому не может выполнить команду npm. Если у меня нет огромной логической ошибки; что вполне возможно;-)
Среда:
- Windows 10 Pro [up2date]
- Используется общий диск для докера
- Докер версия 1.12.3, сборка 6b644ec
- Docker-машина версия 0.8.2, сборка e18a919
- docker-compose версия 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.