【问题标题】:Relative Path with Docker-Compose Shared VolumesDocker-Compose 共享卷的相对路径
【发布时间】:2018-08-07 15:08:24
【问题描述】:

好像是this question has already been asked by another poster,但是没有人回答。我有更多关于这件事的信息,所以我重新问了同样的问题 - 但有很多额外的材料。

我在 Windows 10 上运行 Docker。我已将 Docker 配置为使用 Linux 容器(不是 Windows 容器)。我将 C 盘配置为共享驱动器。

问题

我有以下名为 wp.yml 的 docker-compose 文件:

version: '3.2'

services:
   db:
     image: mysql:5.7
     volumes:
       - type: volume
         source: wp_dbA
         target: /var/lib/mysql       
     restart: always

volumes:
    wp_dbA:
      driver_opts:
        type: none
        device: ./wp-db
        o: bind

我执行如下:

c:\repos\wpsand\wpA> docker-compose -f wp.yml up -d

我收到以下错误:

错误:对于 wpa_db_1 无法为服务 db 创建容器:使用选项安装卷时出错:type='none' device='./wp-db' o='bind': no such file or directory

错误:对于 db 无法为服务 db 创建容器:使用选项安装卷时出错:type='none' device='./wp-db' o='bind':没有这样的文件或目录 错误:启动项目时遇到错误。

尽管有消息,但文件夹wp-db 确实已经存在,位于此处:

c:/repos/wpsand/wpA/wp-db

线索...

尽管出现上述错误,但检查 docker volume ls 显示卷 wpa_wp_dbA 是新创建的。

线索#1

如果我将共享卷device 更改为使用绝对路径(例如/c/repos/wpsand/wpA),然后再次运行...我会遇到同样的问题。 但是,错误消息仍然说找不到具有相对路径./wp-db 的设备。

显然,重用名为wp_dbA 的共享卷会导致忽略任何新指定的路径。原来的./wp-db 是它将尝试使用的。

线索#2

如果我恢复到相对路径,但将共享卷的名称更改为“wp_dbB”,我仍然会收到同样的错误。

线索#3

这结合了上面的#1 和#2。如果我发明一个新的共享卷名并使用绝对路径,它就可以工作!我的容器已成功启动。很遗憾, 我不再使用我想要的相对路径。

线索#4

现在我的容器可以工作了,我docker-compose down 并再次更改 docker-compose 文件。我把相对路径放回去,然后“组合起来”。 有效!

结论?

看起来相对路径根本不起作用。但是我一直看到使用相同的共享卷相对路径表示法在线发布的 docker-compose 文件。也许它适用于 Docker,但不适用于 Windows 上的 Docker?

任何人都可以提出解决方法吗?

更新!

我发现this SO post 几乎有一个相对路径解决方法。我更新了我的 compose 文件以使用 ${PWD} 表示法,并从我的 Git Bash shell 启动它。现在我得到了这个错误:

$ docker-compose up -d
Creating wpa_db_1        ... error
Creating wpa_db_1        ...

ERROR: for wpa_db_1  Cannot create container for service db: error 
while mounting volume with options: type='none'
device='C:/repos/wpsand/wpA/wp-db' o='bind': no such file or directory

ERROR: for db  Cannot create container for service db: error while 
mounting volume with options: type='none' device='C:/repos/wpsand/wpA/wp-db'
o='bind': no such file or directory
Encountered errors while bringing up the project.

这几乎奏效了!如果 ${PWD} 扩展为 Linux 挂载符号 (/c/repos/wpsand/wpA/wp-db) 就好了!

【问题讨论】:

  • 我在 Docker for Windows 上遇到了非常相似的问题。我倾向于发现放入相对路径而不是共享卷名确实有效,但卷部分下的卷的相对路径不起作用。不知道为什么

标签: docker docker-compose docker-volume


【解决方案1】:

./ 语法适用于 win 10 环境。

volumes:
  - ./mdata/:/data/db/
  - ./logs/:/var/log/mongodb/mongod.log
  - ./mongod.cfg:/etc/mongod.conf.orig

【讨论】:

  • 这很奇怪。对我来说,无论我是否使用./ 打开,它都是相对路径。当我更改为 -v ${PWD}/local-relative:/remote/path 时,它起作用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 2019-06-03
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多