![](/img/trans.png)
[英]How to set a path on host for a named volume in docker-compose.yml
[英]Why is docker-compose creating volume in random path instead of the path I specified in docker-compose.yml?
我正在嘗試將 nexus 數據存儲在持久卷中。 為此,我使用了這個 compose yaml:
version: '3.5'
services:
nexus:
image: sonatype/nexus3
volumes:
- ./nexus-data:/nexus-data sonatype/nexus3
ports:
- "8081:8081"
networks:
- devops
extra_hosts:
- "my-proxy:my-proxy-address"
restart: on-failure
networks:
devops:
name: devops
driver: bridge
在運行docker-compose up
之前docker-compose up
我已經創建了nexus-data
文件夾,並按照此處的建議為uid/guid 200
提供了所需的權限:
https://github.com/sonatype/docker-nexus3/blob/master/README.md#persistent-data 。
root@master-node:~/docker# ll
total 16
drwxr-xr-x 3 root root 4096 Jan 8 13:37 ./
drwx------ 22 root root 4096 Jan 8 13:40 ../
-rw-r--r-- 1 root root 319 Jan 8 13:36 docker-compose.yml
drwxr-xr-x 2 200 200 4096 Jan 8 13:37 nexus-data/
在運行撰寫文件之前,這里是 docker 的卷列表(它是空的):
root@master-node:~/docker# docker volume ls
DRIVER VOLUME NAME
在docker-compose up
命令之后,docker 創建了如下圖所示的卷:
root@master-node:~/docker# docker volume ls
DRIVER VOLUME NAME
local 7b7b6517e5ed0e286a8fc7caef756141b5bbdb6e074ef93a657850da3dd78b2b
root@master-node:~/docker# docker volume inspect 7b7b6517e5ed0e286a8fc7caef756141b5bbdb6e074ef93a657850da3dd78b2b
[
{
"CreatedAt": "2020-01-08T13:42:34+03:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/7b7b6517e5ed0e286a8fc7caef756141b5bbdb6e074ef93a657850da3dd78b2b/_data",
"Name": "7b7b6517e5ed0e286a8fc7caef756141b5bbdb6e074ef93a657850da3dd78b2b",
"Options": null,
"Scope": "local"
}
]
root@master-node:~/docker# ls /var/lib/docker/volumes/7b7b6517e5ed0e286a8fc7caef756141b5bbdb6e074ef93a657850da3dd78b2b/_data
admin.password cache db elasticsearch etc generated-bundles instances javaprefs karaf.pid keystores lock log orient port restore-from-backup tmp
但是我在撰寫文件( nexus-data
)中指定的文件夾仍然是空的:
root@master-node:~/docker# ls nexus-data/
root@master-node:~/docker#
那么,我在這里做錯了什么? 為什么nexus-data
空並且 docker 在另一條路徑中創建卷?
您已經創建了一個主機卷,又名綁定安裝(它沒有顯示在docker volume ls
因為它不是命名卷)B 從./nexus-data
上的/nexus-data sonatype/nexus3
到容器內的/nexus-data sonatype/nexus3
。 這看起來像是來自docker run
命令的復制和粘貼錯誤,因為您將圖像名稱添加到安裝在容器內的路徑中。 您應該能夠 exec 進入容器並查看您的文件:
docker exec ... ls "/nexus-data sonatype/nexus3"
您應該從卷路徑中刪除映像名稱以掛載容器內的典型位置:
version: '3.5'
services:
nexus:
image: sonatype/nexus3
volumes:
- ./nexus-data:/nexus-data
ports:
- "8081:8081"
networks:
- devops
extra_hosts:
- "my-proxy:my-proxy-address"
restart: on-failure
networks:
devops:
name: devops
driver: bridge
您確實看到的卷是匿名卷。 這將來自定義您未包含在容器規范中的卷的圖像本身。 使用該卷檢查容器將顯示它的安裝位置,最有可能在/nexus-data
。
下面docker-compose.yaml
按預期工作:
version: '3.5'
services:
nexus:
image: sonatype/nexus3
volumes:
- ./nexus-data:/nexus-data
ports:
- "8081:8081"
networks:
- devops
extra_hosts:
- "my-proxy:my-proxy-address"
restart: on-failure
networks:
devops:
name: devops
driver: bridge
原始docker-compose.yaml
規范中的尾隨sonatype/nexus3
:
...
volumes:
- ./nexus-data:/nexus-data sonatype/nexus3
...
...拋出docker
off - 隨機命名的卷是根據sonatype/nexus3
Dockerfile
的VOLUME
指令創建的,並安裝到正在運行的容器中,因此為什么預期的本地安裝目錄為空。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.