我有一个从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
docker-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传递更多特定位。也许这不是最佳做法?
埃里克·丹嫩伯格(ErikDannenberg)的观点是正确的,体积分层意味着我试图做的事情没有任何意义。(如果您想了解更多信息,那么在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来构建我的项目。这意味着我需要对项目文件夹具有读写权限, 并且
在容器消失后它必须保留。
卷装入后,我需要做两件事,所以我想出了以下解决方案…
docker / gulp / Dockerfile:
FROM node
RUN npm install --global gulp-cli
ADD start-gulp.sh .
CMD ./start-gulp.sh
docker / gulp / start-gulp.sh:
#!/usr/bin/env bash
until cd /usr/src/app && npm install
do
echo "Retrying npm install"
done
gulp watch
docker-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
。这仍然很脆弱,但是可以。:)
问题内容: 我最近创建了一个在Windows上的boot2docker上运行的mongodb docker实例。 不幸的是,在尝试kitematic的过程中,我意外地从mongo容器中删除了该卷,并且无法再访问我的数据。 mongo实例似乎创建了一个新卷,而旧卷现在仍悬空(孤立)并且未安装在任何容器中。 有什么办法可以恢复吗? 问题答案: 感谢您的答复,它使我处于正确的轨道,我设法使用以下命令启动
我尝试以配置yaml文件作为参数运行opentelemetry docker映像:
问题内容: 我正在运行一个Jenkins集群,其中在Master和Slave中,它们都作为Docker容器运行。 主机是在MacOS上运行的最新的boot2docker VM。 为了使Jenkins能够使用Docker执行部署,我将docker.sock和docker客户端从主机安装到Jenkins容器,如下所示: 在将卷装载到Jenkins容器中运行的Docker容器时,我遇到了问题。例如,如果
问题内容: 我刚刚检查了/ var / lib / docker / volumes文件夹,发现该文件夹正以名为Docker UUID的文件夹爆炸,每个文件夹都包含一个config.json文件,其内容与 哪里 是指向主机上的文件夹的路径,该主机已通过-v开关挂载到Docker容器上。我有这样的文件夹可以追溯到我对Docker进行实验的开始,即大约3周前。 有问题的容器很久以前就已停止并且dock
问题内容: 我正在使用Docker,并且我想挂载一个变化很大的动态文件夹(因此我不必为每次执行都制作一个Docker映像,这会太昂贵),但是我希望该文件夹是只读的。将文件夹所有者更改为其他人可行。但是,需要访问权限,而我不希望将其公开给应用程序。 当我使用flag进行挂载时,它将提供我提供的任何用户名,我在docker映像内创建了一个非root用户,但是,该卷中的所有文件都以运行docker的用户
我想在Docker上运行SonarQube。当我运行whiteout volume Persisted选项时,它与以下命令一起正常工作: 2019-07-07 06:42:41,143无法创建文件/opt/sonarqube/logs/es.log java.io.io.ioException:在java.base/java.io.unixfilesystem.createFileTraction