[英]docker-compose persistent data on host and container
我在docker-compose yml 3.0+中的卷有問題
所以我知道一個卷的行為就像一個坐騎。。但是我已經建立了一個Wiki,當我在docker-compose中設置一個卷時,容器上的數據將被刪除(隱藏)。
因此,我該如何先將容器中的數據保存到主機,下一次啟動容器時,它將覆蓋我保存的數據。
因此,當前情況是:我從“ docker-compose up --build”開始,創建了一個卷(空)並將其復制到容器中。因此,該容器上該文件夾中的所有內容都被刪除了。
泊塢窗,compose.yml
version: '3.1'
services:
doku-wiki:
build: .
ports:
- '4000:80'
Dockerfile
FROM php:7.1-apache
COPY dokuwiki-stable /var/www/html/
COPY entrypoint.sh /entrypoint.sh
RUN chmod 777 /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 80
聽起來好像您正在使用主機卷,在其中將主機目錄映射到容器中。 執行此操作時,將看不到映像內該位置的任何內容,只會顯示主機上存在的文件。
如果要從映像內部復制文件以初始化卷,則有兩個選擇:
切換到命名卷。 Docker會自動將這些初始化為映像的內容,包括所有權限。 如果您不需要從Docker外部直接訪問文件,則這是首選的解決方案。
更改圖像入口點以及在圖像中存儲文件的位置。
在第二個選項上,如果希望/ data作為應用程序的卷,則可以具有一個entrypoint.sh來執行以下操作:
#!/bin/sh
if [ ! -d "/data" ]; then
ln -s /data_save /data
elif [ -z "$(ls -A /data)" ]; then
cp -a /data_save/. /data/
fi
exec "$@"
您的映像需要將所有初始文件保存到/ data_save而不是/ data。 然后,如果目錄為空,則將/ data_save復制到卷/ data。 如果根本沒有映射該卷,則僅創建從/ data到/ data_save的符號鏈接。 最后一行從您的Dockerfile運行CMD
,或者docker docker run
cli,就像入口點不在一樣。 向您的Dockerfile添加的行如下所示:
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.