docker工人 – 在初始启动时编写命名的卷拷贝内容

我可能对卷的工作方式有些困惑,我一遍又一遍地读同样的东西,对我来说应该是工作的。 如果卷首次被初始化,我希望容器内的文件夹中的内容可以复制。


我有这样的东西:

我有这样的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"] 

当我build立这个图像时,我把它标记为tomcat。


然后我有另一个Dockerfile与我设置的一堆环境variables和一个脚本。

像这样:

MyApp Dockerfile

 FROM tomcat ENV SOME_VAR=Test1 COPY assets/script.sh /script.sh 

第二个图像从第一个图像构build,只是添加一个脚本,并设置一些设置。 到现在为止还挺好。

我想在我的docker-compose.yml文件中做这样的事情:


Docker撰写文件

 website: image: myapp ports: - "8000:8080" volumes: - /srv/myapp/conf:/opt/tomcat/conf 

我想把/ opt / tomcat / conf的内容复制到/ srv / myapp / conf中,当该文件夹第一次被创build时。 我读过的每一个东西都表明这应该可以工作,但它只是创build文件夹而不会复制内容。 我在这里错过了什么?

基本上我有这个问题: https : //github.com/moby/moby/issues/18670

哦,我的docker,撰文yaml文件正在使用版本2.1,如果这有所作为。

当你绑定容器内的主机容量时,你正在寻找的东西是不可能的。 它只会在你有一个命名的卷。 然后docker会将文件夹的内容复制到容器中。 你需要改变你撰写的文件

 version: '3' services: website: image: myapp ports: - "8000:8080" volumes: - appconfig:/opt/tomcat/conf volumes: appconfig: {} 

如果你想获得configuration,那么你可以使用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 

为了这个工作目录不应该第一次存在。