如何在docker-compose中将绝对主机路径挂载为命名卷?

4

我已经尝试了这个stackoverflow线程中的解决方案。但是对我来说没有起作用,如下所示。

这是我的docker-compose.yml文件:

version: "3.7"
services:
  db:
    image: mysql
    volumes:
     - data:/var/lib/mysql

volumes:
  data:
    driver_opts:
      type: none
      device: /usr/local/opt/mysql/mywebsite.com
      o: bind  

这是docker-compose up的结果:
$ docker-compose up
Creating volume "mycontainer_data" with default driver
Recreating 45bc03b2c674_mycontainer_db_1 ... error

ERROR: for 45bc03b2c674_mycontainer_db_1  Cannot create container for service db: error while mounting volume with options: type='none' device='/usr/local/opt/mysql/mywebsite.com' 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='/usr/local/opt/mysql/mywebsite.com' o='bind': no such file or directory
ERROR: Encountered errors while bringing up the project.

我曾尝试使用type: none以外的type: volumetype: bind,但是我遇到了同样的错误。

该目录显然存在:

$ ls -al /usr/local/opt/mysql/
...
drwxr-xr-x   2 cameronhudson  staff      64 Jun 10 10:32 mywebsite.com
...

1个回答

1
我的配置没有生效有两个原因。
首先,Docker不支持符号链接,而mysql目录是一个符号链接。
$ ls -al /usr/local/opt | grep mysql
lrwxr-xr-x    1 cameronhudson  admin    22 Jan 23 17:42 mysql -> ../Cellar/mysql/8.0.13

然而,即使使用没有任何符号链接的路径/databases/mywebsite.com,我仍然遇到了相同的no such file or directory错误。
我发现,如果我将docker-compose.yml文件中的此目录挂载为无名称卷,我会得到一个不同但更合理的错误提示。
version: "3.7"
services:
  db:
    image: mysql
    volumes:
     - /databases/mywebsite.com:/var/lib/mysql

新的错误:
ERROR: for mycontainer_db_1  Cannot start service db: b'Mounts denied: \r\nThe path /databases/mywebsite.com\r\nis not shared from OS X and is not known to Docker.\r\nYou can configure shared paths from Docker -> Preferences... -> File Sharing.\r\nSee https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.\r\n.'

在 Docker Desktop 中添加了这个路径之后,我能够使用原始配置up服务。它还可以使用type: nonetype: volumetype: bind或完全省略type

你说的“在Docker桌面版中添加了这个路径”是什么意思? - Slav
@Slav Docker Desktop 是 Docker 的一个软件包。安装它将安装 Docker CLI 和守护程序。更多信息请参见:https://www.docker.com/products/docker-desktop - Cameron Hudson
是的,我已经安装了Docker桌面版。它显示正在运行的容器,并允许启动/停止/删除/检查它们。在Docker桌面版中,您可以在哪里“添加路径”到卷? - Slav
1
@Slav Docker Desktop -> 首选项 -> 资源 -> 文件共享 - Cameron Hudson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接