在发布任何配置之前,我会先解释一下我想存档的内容,并想提到我是Docker的新手。
为了简化路径对话,让我们假设我们谈论项目“Docker me up!”。它位于X:\docker-projects\docker-me-up\
中。
目标:
我想运行多个具有不同内容的nginx项目,每个项目代表一个专用的构建。在开发过程中[docker-compose up -d
],容器应该立即更新;效果很好。
棘手的部分是,我想将npm [http://gruntjs.com]从我的主机直接外包到容器/镜像中,这样我就可以通过安装docker来调试和开发我的位置。因此,必须将npm安装在“服务”中,并且需要初始化观察程序。
每个项目都封装在docker主机/内部版本中的自己的文件夹中,除了自身之外,其他都不应该有任何知识。
我的解决方案:
我尝试了许多不同的版本,例如“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
Docker文件
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命令。除非我有一个巨大的逻辑错误;否则,这很有可能;-)环境:
最佳答案
调用docker-compose up
之后,您可以使用以下代码获取app
容器的交互式 shell :
docker-compose run app
您还可以使用以下命令运行一次性命令:
docker-compose run app [command]
app
完成后,您的docker-compose up
容器未运行的原因是,您的Dockerfile
没有定义服务。为了使app
作为服务运行,您需要通过添加以下内容来使线程在容器的前台运行:CMD ./run-my-service
到Dockerfile的末尾。
关于docker - 构建一个可以执行npm任务的Web应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40700759/