在发布任何配置之前,我会尝试解释我想要归档的内容并想提一下,我是 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