我可能对卷的工作方式有点困惑,我一遍又一遍地阅读相同的东西,对我来说它应该有效。如果第一次初始化卷,我希望容器内文件夹中的内容复制。
我有这样的事情:
我有一个这样的 Dockerfile:https : //github.com/docker-library/tomcat/blob/f6dc3671bf56465917b52c8df4356fa8f0ebafcd/7/jre7/Dockerfile
而之前
EXPOSE 8080
CMD ["catalina.sh", "run"]
我有类似的东西
Tomcat Dockerfile
VOLUME ["/opt/tomcat/conf"]
EXPOSE 8080
CMD ["catalina.sh", "run"]
当我构建此映像时,我将其标记为 tomcat。
然后我有另一个 Dockerfile,里面有一堆我设置的环境变量和一个脚本。
像这样:
MyApp Dockerfile
FROM tomcat
ENV SOME_VAR=Test1
COPY assets/script.sh /script.sh
第二个图像是从第一个图像构建的,只是添加了一个脚本并设置了一些设置。到现在为止还挺好。
我想在我的 docker-compose.yml 文件中做这样的事情:
Docker 撰写文件
website:
image: myapp
ports:
- "8000:8080"
volumes:
- /srv/myapp/conf:/opt/tomcat/conf
我希望/opt/tomcat/conf的内容在第一次创建该文件夹时复制到/srv/myapp/conf 中。我读到的所有内容都表明这应该有效,但它只是创建文件夹而不复制内容。我在这里错过了什么吗?
基本上我有这个问题:https : //github.com/moby/moby/issues/18670
哦,我的 docker-compose yaml 文件使用的是 2.1 版,如果这有所不同的话。
当您在容器内绑定主机卷时,您正在寻找的东西是不可能的。只有当你有一个命名卷时它才有效。然后 docker 会将文件夹的内容复制到一个容器中。您需要将撰写文件更改为
version: '3'
services:
website:
image: myapp
ports:
- "8000:8080"
volumes:
- appconfig:/opt/tomcat/conf
volumes:
appconfig: {}
如果您想获取配置,那么您可以使用 shell 脚本和您的原始撰写文件
#!/bin/bash
if [ ! -d "/srv/myapp/conf" ]; then
mkdir /srv/myapp/conf
docker create --name myappconfig myapp
docker cp myapp:/opt/tomcat/conf /srv/myapp/
docker rm myapp
fi
docker-compose up -d
为此,该目录第一次不应该存在。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句