2017-08-16 35 views
0

我可能對卷的工作方式有點困惑,並且我一遍又一遍地閱讀相同的東西,對我來說它應該工作。如果第一次初始化卷,我希望容器內的文件夾中的內容可以複製。docker-compose在初始啓動時命名的卷拷貝內容


我有這樣的事情:

我有一個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 

第二圖像從第一圖像生成並只是增加了一個腳本,並設置一些設置。到現在爲止還挺好。

我想要做這樣的事情在我的搬運工,compose.yml文件:


泊塢撰寫文件

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

我想/選擇的內容/ tomcat/conf複製到/srv/myapp/conf當該文件夾第一次被創建。我讀過的所有內容都表明這應該起作用,但它只是創建文件夾而不復制內容。我在這裏錯過了什麼嗎?

基本上我有這個問題: https://github.com/moby/moby/issues/18670

哦,如果有差別我的碼頭工人,撰寫YAML文件使用2.1版本。

+0

在您的docker-compose文件中,您正在將'/ srv/myapp/conf'的內容從本地系統複製到容器內的'/ opt/tomcat/conf'。你在做什麼應該從你的主機內容複製到容器,但我相信你想要這個相反。 – Ayushya

回答

0

當您綁定容器內的主機卷時,您正在查找的內容不可用。它只有在你有一個命名卷時纔有效。然後docker會將文件夾的內容複製到一個容器中。你需要改變你,如果你想獲得的配置了,那麼你可以使用一個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 

對於這項工作的目錄不應該構成文件

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

第一次存在。

+0

啊,好吧,生病吧 – Matt

+0

似乎工作正常。它不會複製權限,但我想我可以使用它。我確實改變了它,因爲docker會創建一個新文件夾並複製它,所以它最終會變成類似/ srv/myapp/conf/conf – Matt