![](/img/trans.png)
[英]Docker VOLUME command inside Dockerfile not working as expected
[英]docker volume and VOLUME inside Dockerfile
我對創建docker volume create my-vol
和VOLUME ["/var/www"]
之間的區別感到困惑。
我的理解是:
1) docker volume create my-vol
在我們的機器上創建一個持久卷,每個容器都可以鏈接到my-vol
。
2) VOLUME ["/var/www"]
在其容器內創建一個卷。
當我創建另一個容器時,可以按以下方式鏈接
my-vol
:運行容器時$ docker run -d --name devtest --mount source=myvol2,target=/app nginx:latest
那時,如果我在Dockerfile中添加了
VOLUME ["/var/www"]
,則此docker文件的所有數據都將存儲在myvol2
和/var/www
?
Dockerfile VOLUME
命令說兩件事:
如果操作員未在特定容器目錄上顯式安裝卷,則無論如何都在其中創建一個匿名卷。
Dockerfile步驟將永遠無法對該目錄樹進行進一步更改。
作為操作員,您可以使用docker run -v
選項將卷(命名卷或主機目錄)安裝到容器中。 您可以將其掛載到容器中的任何目錄上,而不管Dockerfile中是否為它聲明了VOLUME
。
(因為無論您是否聲明VOLUME
,都可以使用docker run -v
,並且它具有令人困惑的副作用,所以我通常會避免在Dockerfiles中聲明VOLUME
。)
就像在普通Linux中一樣,在任何給定目錄上只能(有用地)安裝一件事。 使用您描述的設置,數據將存儲在您創建並安裝的myvol2
,並且可以在容器的/var/www
中看到,但是數據實際上僅存儲在一個位置。 如果刪除並重新創建沒有卷掛載的容器,則數據將不再存在。
Docker中使用兩種類型的持久性存儲,第一種是Docker Volumes,第二種是綁定裝載。 它們之間的區別在於,卷是Docker內部的並存儲在Docker存儲中(通常位於/ var / lib / docker下),而綁定裝載使用計算機上的物理位置存儲持久數據。
如果要對nginx使用Docker卷:
docker卷創建nginx-vol
docker運行-d --name devtest -v nginx-vol:/ usr / share / nginx / html nginx
如果要使用綁定安裝:
docker run -d --name devtest -v [路徑]:/ usr / share / nginx / html nginx
[path]是您要存儲容器數據的位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.