在发布任何配置之前,我试着解释一下我想要存档的内容,并且想提一下,我是docker的新手。
为了让路径对话更容易,让我们假设我们谈论这个项目" Docker me up!"它位于X:\docker-projects\docker-me-up\
。
目标:
我想用不同的内容运行多个nginx项目,每个项目代表一个专用的构建。在开发[docker-compose up -d
]期间,容器应立即更新;哪个工作正常。
棘手的部分是,我想将npm [http://gruntjs.com]从我的主机直接外包到容器/图像中,所以我可以通过安装docker来调试和开发无论我在哪里。因此,必须在“服务”中安装npm,并且需要初始化观察者。
每个项目都封装在docker中的host / build上的自己的文件夹中,除了它本身之外,不应该知道任何其他内容。
我的解决方案:
我尝试过很多不同的版本,有“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
问题:
如您所见,“data”服务包含 npm ,并且应该能够执行npm命令。但是,如果我运行docker-compose up -d
一切正常。我可以编辑页面内容,使用它等。但是数据容器没有运行,因此无法执行任何npm命令。除非我有一个巨大的逻辑错误;这很可能; - )
环境:
答案 0 :(得分: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的末尾。