Создание веб-приложения, которое может выполнять задачи 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.

Другие вопросы по тегам