将主机目录从 yaml/compose 文件挂载到 docker 容器

Mounting a host directory to a docker container from yaml/compose file

我的部分配置是这样的

mymicroservice:
  image: service_img
  networks: myoverlay
  volumes:
    - /Users/abcdUser/mountme:/opt/company/

当我部署 docker 群服务堆栈时,我的机器目录被挂载到 /opt/company,这就完成了工作。

但是,我想在单独的 volumes: 下指定源目录,然后在那边指定那个名称。我认为这是可能的,但我找不到语法。

所以我想要以下内容但无法做到:

mymicroservice:
  image: service_img
  networks: myoverlay
  volumes:
    - myownvolume:/opt/company/


volumes:
 - myownvolume: /Users/abcdUser/mountme

我想澄清一下,这里的myownvolume只是指向目录/Users/abcdUser/mountme,我并不是要创建一个docker卷。或者还有其他更好的方法吗?

这不可能。您必须使用绑定安装语法或卷语法。 compose 配置顶层的卷不允许您混合使用两者。有关类似问题,请参阅

可以这样做,但不能使用标准设置。默认卷驱动程序不允许您正在查找的格式。您需要使用需要外部安装的 docker 插件。考虑下面的 yaml

version: '2'

services:
  one:
    image: alpine
    working_dir: /one/
    command: sleep 600
    volumes:
      - data:/one/

  two:
    image: alpine
    working_dir: /two/
    command: sleep 600
    volumes:
      - data:/two/

volumes:
  data:
    driver: local-persist
    driver_opts:
      mountpoint: /data/local-persist/data

当你安装了 local-persist 插件时,上面的方法就可以工作了。 https://github.com/CWSpear/local-persist

您可以在

上找到其他可用的插件

https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins

此外,如果卷条目的重复对您来说是个问题,那么您可以在 YAML 中使用锚点

version: '3'

services:
  alpines:
    image: alpine
    command: sleep 200
    volumes: &common_volumes
      - ./data:/data
      - ./config:/config
  alpine2:
    image: alpine
    command: sleep 200
    volumes: *common_volumes

$ docker-compose config
services:
  alpine2:
    command: sleep 200
    image: alpine
    volumes:
    - /home/vagrant/so/volumes2/data:/data:rw
    - /home/vagrant/so/volumes2/config:/config:rw
  alpines:
    command: sleep 200
    image: alpine
    volumes:
    - /home/vagrant/so/volumes2/data:/data:rw
    - /home/vagrant/so/volumes2/config:/config:rw
version: '3.0'