簡體   English   中英

如果在Dockerfile中進行了更改,Docker會在掛載時更新卷的內容嗎?

[英]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卷相關

看起來你想要它反過來(即容器是源,主機是目的地)。

這是一個解決方法:

  1. 在Dockerfile中創建卷

  2. 不使用-v運行它,即: docker run --name=my_container my_image

  3. 運行docker inspect --format='{{json .Mounts}}' my_container

  4. 這將為您提供類似於以下的輸出:

[{"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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM