gpt4 book ai didi

具有目标 Windows 本地文件夹的 Docker 命名卷

转载 作者:行者123 更新时间:2023-12-01 15:51:11 26 4
gpt4 key购买 nike

在 docker-compose 文件中,我想创建一个命名卷,该卷将针对本地驱动器进行测试。对于生产,我们将使用 NFS。

我创建的撰写文件如下,

version: '3.3'
services:

test:
build: .
volumes:
- type: volume
source: data_volume
target: /data
networks:
- network

volumes:
data_volume:
driver: local
driver_opts:
o: bind
type: none
device: c:/data

networks:
network:
driver: overlay
attachable: true

当我运行 docker-compose up 时,出现以下错误,
for test_test_1  Cannot create container for service test: failed to mount local volume: 
mount c:/data:/var/lib/docker/volumes/test_data_volume/_data, flags: 0x1000: no such file
or directory

即使有错误,它仍然会创建命名卷。所以当我检查它时,
{
"CreatedAt": "2019-10-07T09:10:14Z",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "test",
"com.docker.compose.version": "1.24.1",
"com.docker.compose.volume": "data_volume"
},
"Mountpoint": "/var/lib/docker/volumes/test_data_volume/_data",
"Name": "test_data_volume",
"Options": {
"device": "c:/data",
"o": "bind",
"type": "none"
},
"Scope": "local"
}

我仍然不确定为什么 Mountpoint 将目标定位到该位置。
我知道我可以在没有命名卷的情况下实现这一点(我已经这样做了),但是对于项目的 future ,我们肯定需要命名卷。

任何建议如何实现这一目标?

最佳答案

同样在这里。使用 Docker Desktop for Windows,我尝试挂载本地路径 E:\Project\MyWebsite\code到命名卷但失败。这是我如何解决这个问题的。

首先,我将路径更改为“.”:

volumes:
website:
driver: local
driver_opts:
type: none
device: "."
o: bind

这次 docker-compose up运行成功,所以我登录到 shell 并检查挂载目录的样子:
bash-5.0# ls -l
total 62
lrwxrwxrwx 1 root root 11 Oct 1 15:15 E -> /host_mnt/e
drwxr-xr-x 2 root root 14336 Sep 11 15:27 bin
drwxr-xr-x 4 root root 2048 Apr 19 2017 dev
lrwxrwxrwx 1 root root 11 Oct 1 15:15 e -> /host_mnt/e
drwxr-xr-x 1 root root 180 Sep 30 11:53 etc
drwxr-xr-x 2 root root 2048 Sep 11 15:27 home
drw-r--r-- 4 root root 80 Oct 8 22:52 host_mnt
drwxr-xr-x 1 root root 60 Sep 30 11:53 lib
drwxr-xr-x 5 root root 2048 Sep 11 15:27 media
...
drwxrwxrwt 1 root root 40 Oct 11 19:37 tmp
drwxr-xr-x 1 root root 80 Sep 11 15:27 usr
drwxr-xr-x 13 root root 2048 Sep 11 15:27 var

显然不是 Windows 卷,可能是一些由 Docker 创建的 Linux VM。但是路径 /host_mnt/e/host_mnt/E似乎是指示性的,所以我尝试更改 docker-compose定义为:
volumes:
website:
driver: local
driver_opts:
type: none
device: "/host_mnt/e/Project/MyWebsite/code"
o: bind

它奏效了!看起来命名卷与 Windows 的顺序方式不同。

/host_mnt/e除非您之前已授予对驱动器号的访问权限,否则它可能不会存在。但这对您来说应该不是问题,因为您已经尝试了安装可以工作的本地驱动器的顺序方式。

关于具有目标 Windows 本地文件夹的 Docker 命名卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58266647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com