我可能对卷的工作方式感到有些困惑,而且我一遍又一遍地阅读相同的内容,而且我应该正常工作。如果第一次初始化卷,我希望容器内的文件夹中的内容复制。
我有这样的事情:
我有一个像这样的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,如果这有所不同。
答案 0 :(得分: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
为此,目录不应该是第一次存在。