具有目标windows本地文件夹的Docker命名卷
在docker compose文件中,我想创建一个命名卷,该卷将针对本地驱动器进行测试。对于生产,我们将使用NFS 我创建了如下的compose文件:具有目标windows本地文件夹的Docker命名卷,docker,containers,docker-swarm,Docker,Containers,Docker Swarm,在docker compose文件中,我想创建一个命名卷,该卷将针对本地驱动器进行测试。对于生产,我们将使用NFS 我创建了如下的compose文件: version: '3.3' services: test: build: . volumes: - type: volume source: data_volume target: /data networks: - network volumes: d
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时,出现以下错误
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会把目标对准那个位置。
我知道我可以在没有命名卷的情况下实现这一点(我已经做到了),但对于项目的未来,我们肯定需要命名卷
如何实现这一点,有什么建议吗?这里也一样。使用Docker Desktop for Windows,我尝试将本地路径
E:\Project\MyWebsite\code
装载到指定卷,但失败。我是这样整理的
首先,我将路径更改为“.”:
这一次,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虚拟机。但是路径/host\u mnt/e
和/host\u mnt/e
似乎是指示性的,因此我尝试将docker compose
定义更改为:
volumes:
website:
driver: local
driver_opts:
type: none
device: "/host_mnt/e/Project/MyWebsite/code"
o: bind
成功了!看起来命名卷的工作方式与Windows的顺序方式不同
此
/host\u mnt/e
可能不存在,除非您之前已授予对驱动器号的访问权限。但这对您来说不应该是个问题,因为您已经尝试了安装本地驱动器的顺序方式。这是否会影响docker compose的可移植性?因为现在每个人都应该使用那个精确的路径,非常感谢,似乎现在相对路径也起作用了<代码>设备:“./app”
volumes:
website:
driver: local
driver_opts:
type: none
device: "/host_mnt/e/Project/MyWebsite/code"
o: bind