Docker-在运行之前组合卷装入

我有一个docker-compose.yml指向的Dockerfile。

我希望docker-compose.yml中的卷装入在Dockerfile中的RUN之前发生。

Dockerfile:

 FROM node WORKDIR /usr/src/app RUN npm install --global gulp-cli \ && npm install ENTRYPOINT gulp watch 

泊坞窗,compose.yml

 version: '2' services: build_tools: build: docker/gulp volumes_from: - build_data:rw build_data: image: debian:jessie volumes: - .:/usr/src/app 

首先执行Dockerfile然后从docker-compose进行挂载是完全有意义的,但是有没有办法解决这个问题。

我想保持Dockerfile的通用性,同时从撰写中传递更多特定的位。 也许这不是最好的做法?

Erik Dannenberg的说法是正确的,这个分层意味着我所要做的没有任何意义。 (如果你想阅读更多的信息, Docker网站上有另一个非常好的解释)。 如果我想让Docker执行npm install那么我可以这样做:

 FROM node ADD . /usr/src/app WORKDIR /usr/src/app RUN npm install --global gulp-cli \ && npm install CMD ["gulp", "watch"] 

然而,这不适合我的情况。 目标是使用NPM来安装项目依赖项,然后运行gulp来构build我的项目。 这意味着我需要读取和写入项目文件夹的访问权限它需要在容器消失后保留。


音量挂载后我需要做两件事情,所以我想出了以下解决scheme…

泊坞窗/一饮而尽/ Dockerfile:

 FROM node RUN npm install --global gulp-cli ADD start-gulp.sh . CMD ./start-gulp.sh 

泊坞窗/一饮而尽/ start-gulp.sh:

 #!/usr/bin/env bash until cd /usr/src/app && npm install do echo "Retrying npm install" done gulp watch 

泊坞窗,compose.yml:

 version: '2' services: build_tools: build: docker/gulp volumes_from: - build_data:rw build_data: image: debian:jessie volumes: - .:/usr/src/app 

所以现在容器启动一个bash脚本,它将持续循环,直到它可以进入目录运行npm install 。 这仍然相当脆弱,但它的工作。 🙂

在Docker构build期间,您不能装入主机文件夹或卷。 允许这将妥协build立可重复性。 在Docker构build期间访问本地数据的唯一方法是构build上下文,这是您传递给build命令的PATHURL中的所有内容。 请注意, Dockerfile需要存在于上下文中的某处。 有关更多详细信息,请参阅https://docs.docker.com/engine/reference/commandline/build/