2

在发布任何配置之前,我会尝试解释我想要归档的内容并想提一下,我是 docker 新手。

为了使路径对话更容易,假设我们谈论的是“Docker me up!”项目。它位于X:\docker-projects\docker-me-up\.

目标:

我想运行多个具有不同内容的 nginx 项目,每个项目代表一个专用的构建。在开发 [ docker-compose up -d] 期间,容器应立即更新;效果很好。

棘手的部分是,我想将我的主机中的 npm [ http://gruntjs.com]直接外包到容器/映像中,因此只要安装 docker,我就可以在任何地方进行调试和开发。因此,npm 必须安装在“服务”中,并且需要初始化 watcher。

每个项目都封装在 docker 主机/build 上自己的文件夹中,除了它自己之外,不应该有任何其他知识。

我的解决方案:

我尝试了许多不同的版本,包括“volumes_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

问题:

如您所见,“数据”服务包含npm并且应该能够执行 npm 命令。但是,如果我运行docker-compose up -d一切正常。我可以编辑页面内容,使用它等等。但是数据容器没有运行,因此无法执行任何 npm 命令。除非我有很大的逻辑错误;这是很有可能的;-)

环境:

  • Windows 10 专业版 [更新日期]
  • 使用了 docker 的共享驱动器
  • Docker 版本 1.12.3,构建 6b644ec
  • docker-machine 版本 0.8.2,构建 e18a919
  • docker-compose 版本 1.8.1,构建 004ddae
4

1 回答 1

1

调用后docker-compose up,您可以获得app容器的交互式外壳:

docker-compose run app

您还可以使用以下命令运行一次性命令:

docker-compose run app [command]

您的容器在完成app后未运行的原因是您没有定义服务。为了作为服务运行,您需要通过添加以下内容来保持一个线程在容器的前台运行:docker-compose upDockerfileapp

CMD ./run-my-service

到 Dockerfile 的末尾。

于 2016-11-20T05:44:26.383 回答