簡體   English   中英

僅使用docker-compose保留選定卷的數據

[英]Persist data only for selected volumes with docker-compose

我的文檔文件有兩個Docker映像: docs:v1docs:v2 它們只包含/ docs中作為VOLUME公開的一些文件:

# docker run --rm docs:v1 cat /docs/doc.txt
Version1
# docker run --rm docs:v2 cat /docs/doc.txt
Version2

我在這個docker-compose.yml(使用v1.4)中描述了我的應用程序:

app:
    image: "busybox"
    command: /bin/sh -c "cat /docs/doc.txt && echo `date` >> /logs/log.txt"
    volumes:
        - "/logs"
    volumes_from:
        - "docs"
docs:
    image: "docs:v1"

因此,基本上我的應用程序將打印文檔的內容並在日志文件中回顯當前日期。 日志文件也位於VOLUME

=>我只希望能夠將docs更新為docs:v2 ,看到它可以按預期打印“ Version2”並保持日志完整。

首輪:

# docker-compose up
Creating tmp_docs_1...
Creating tmp_app_1...
Attaching to tmp_docs_1, tmp_app_1
app_1  | Version1
...
# docker run --rm --volumes-from tmp_app_1 busybox cat /logs/log.txt
Tue Aug 25 22:09:11 UTC 2015

它可以按預期工作:打印Version1文檔並在日志中回顯。

接下來,我用: image: "docs:v2"更新yml文件。 然后重新啟動我的應用程序:

# docker-compose up
Recreating tmp_docs_1...
Recreating tmp_app_1...
Attaching to tmp_docs_1, tmp_app_1
app_1  | Version1
...
# docker run --rm --volumes-from tmp_app_1 busybox cat /logs/log.txt
Tue Aug 25 22:09:11 UTC 2015
Tue Aug 25 22:10:26 UTC 2015

日志已更新,可以,但是我的文檔仍在Version1中! 可能令人驚訝,但這實際上是預期的行為。 根據docker docs :“ 更新映像時將不包括對數據卷的更改。

是的,但是我希望能夠看到我更新的文檔,所以讓我們嘗試刪除docs容器和卷:

# docker-compose rm -v docs
Removing tmp_docs_1... done

# docker-compose up
Creating tmp_docs_1...
Starting tmp_app_1...
Attaching to tmp_docs_1, tmp_app_1
app_1  | Version1
...

在版本1中仍然沒有運氣..這是因為應用程序容器仍指向舊的Version1卷。 因此,我們也嘗試刪除該應用程序(這次只是應用程序,而不是卷):

# docker-compose rm app
Removing tmp_app_1... done

# docker-compose up
Starting tmp_docs_1...
Creating tmp_app_1...
Attaching to tmp_docs_1, tmp_app_1
app_1  | Version2

版本2:有效! 讓我們檢查一下日志:

# docker run --rm --volumes-from tmp_app_1 busybox cat /logs/log.txt
Tue Aug 25 22:19:21 UTC 2015

ch! 我的舊日志不見了。

所以這又是一個問題:如何更新docs圖像,查看應用程序中的更改,並且仍然能夠在重新啟動時保留日志?

您將需要將卷映射到實際的FS。 現在,您正在使用volume命令在容器中創建卷,即使刪除了容器,這些卷也會繞過UFS並保持不變,這就是為什么必須刪除該卷才能使其正常運行的原因。 將卷映射到主機操作系統上的外部文件夾,然后在升級應用程序時,日志將存在,但應用程序已升級。

要清楚發生了什么:

您創建的初始應用程序>卷初始化>已保存日志。
升級應用程序>日志未更新(更新映像時將不包括對數據量的更改。)(預期行為)。
刪除數據量>升級應用程序>新日志,因為刪除了舊日志,舊日志不見了。

為了解決這些問題,請將卷掛載到主機O / S,以便它們持久存在,但可以在升級時寫入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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