![](/img/trans.png)
[英]Dockerfile build volume changes not reflected on mounted local folder? (OS X / boot2Docker)
[英]Does Docker update contents of volume when mounted if changes are made in Dockerfile?
我讓Jenkins在Docker容器中運行。 主目錄位於主機卷中,以確保在對容器進行更新操作時保留構建歷史記錄。
我更新了容器,在主目錄中創建了一個附加文件。 拉出新容器時,我看不到更改的文件。
ENV JENKINS_HOME=/var/jenkins_home
RUN mkdir -p ${JENKINS_HOME}/.m2
COPY settings.xml ${JENKINS_HOME}/.m2/settings.xml
RUN chown -R jenkins:jenkins ${JENKINS_HOME}/.m2
VOLUME ["/var/jenkins_home"]
我正在運行這樣的容器:
docker run -v /host/directory:/var/jenkins_home -p 80:8080 jenkins
我之前運行過Jenkins,因此主機上已存在主目錄。 當我拉新容器並運行它時,我看到沒有創建文件.m2/settings.xml
。 為什么這樣好?
基本上當你運行:
docker run -v /host-src-dir:/container-dest-dir my_image
您將使用/host-src-dir
覆蓋/container-dest-dir
/host-src-dir
來自Docs
$ docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py
此命令將主機目錄/ src / webapp安裝到/ webapp的容器中。 如果路徑/ webapp已經存在於容器的映像中,則/ src / webapp掛載覆蓋但不會刪除預先存在的內容。 刪除安裝后,可以再次訪問該內容。 這與mount命令的預期行為一致。
這個SO問題也與主機上的docker mount卷相關
看起來你想要它反過來(即容器是源,主機是目的地)。
這是一個解決方法:
在Dockerfile中創建卷
不使用-v
運行它,即: docker run --name=my_container my_image
運行docker inspect --format='{{json .Mounts}}' my_container
這將為您提供類似於以下的輸出:
[{"Name":"5e2d41896b9b1b0d7bc0b4ad6dfe3f926c73","Source":"/var/lib/docker/volumes/5e2d41896b9b1b0d7bc0b4ad6dfe3f926c73/_data","Destination":"/var/jenkins_home","Driver":"local","Mode":"","RW":true,"Propagation":""}]
這意味着你的dir就像在容器上一樣被掛載到主機目錄/var/lib/docker/volumes/5e2d41896b9b1b0d7bc0b4ad6dfe3f926c73/_data
不幸的是,我不知道如何讓它安裝在特定的主機目錄上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.