【问题标题】:How can I mount an absolute host path as a named volume in docker-compose?如何在 docker-compose 中将绝对主机路径挂载为命名卷?
【发布时间】:2019-10-25 03:43:42
【问题描述】:

我已经尝试过this stackoverflow thread 中的解决方案。它对我不起作用,如下所示。

这是我的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: volume 和type: bind,但我得到了同样的错误。

目录明显存在:

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

【问题讨论】:

    标签: docker-compose


    【解决方案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: none、type: volume、type: bind 一起使用,或者完全不使用 type。

    【讨论】:

    • “在 Docker Desktop 中添加了这个路径”是什么意思?
    • @Slav Docker Desktop 是来自 Docker 的一个包。安装它会安装 docker CLI 和守护进程。更多信息:docker.com/products/docker-desktop
    • 是的,我已经安装了 Docker Desktop。它显示正在运行的容器,并允许启动/停止/删除/检查它们。您可以在 Docker Desktop 中的哪个位置“添加路径”到卷?
    • @Slav Docker 桌面 -> 首选项 -> 资源 -> 文件共享
    猜你喜欢
    • 2017-04-15
    • 2017-05-17
    • 2019-04-10
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多