Docker的相对路径 - 撰写共享卷

时间:2018-02-27 20:46:32

标签: docker docker-compose docker-volume

似乎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':没有这样的文件或目录

     

错误:for 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)!

1 个答案:

答案 0 :(得分:3)

./语法对我来说在Win 10环境中很有效。

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