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

时间:2017-09-05 20:04:38

标签: docker docker-compose docker-swarm

我当前配置的一部分就像这样

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

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

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

所以我想要以下几行但不能这样做:

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


volumes:
 - myownvolume: /Users/abcdUser/mountme

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

2 个答案:

答案 0 :(得分:2)

可以这样做,但不能使用标准设置。默认音量驱动程序不允许您正在寻找的格式。您需要使用需要外部安装的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'

答案 1 :(得分:1)

那是不可能的。您必须使用bind mount语法或volume语法。在compose配置顶级的卷不会允许你混合两者。有关类似问题,请参阅how to define a general mount point in docker compose