[英]Docker-compose volume mount before run
我有一个Dockerfile,我指的是docker-compose.yml。
我希望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的通用性,同时从compose中传递更多特定的位。 也许这不是最好的做法?
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来构建我的项目。 这意味着我需要对项目文件夹进行读写访问, 并且在容器消失后需要保留。
安装卷后我需要做两件事,所以我想出了以下解决方案......
泊坞窗/一饮而尽/ 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构建期间无法装入主机文件夹或卷。 允许这会损害构建的可重复性。 在Docker构建期间访问本地数据的唯一方法是构建上下文,它是传递给build
命令的PATH
或URL
中的所有内容。 请注意, Dockerfile
需要存在于上下文中的某个位置。 有关详细信息,请参阅https://docs.docker.com/engine/reference/commandline/build/ 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.