【问题标题】:Mounting a host directory to a docker container from yaml/compose file从 yaml/compose 文件将主机目录挂载到 docker 容器
【发布时间】:2017-09-06 06:34:42
【问题描述】:

我目前的部分配置是这样的

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 卷。或者还有其他更好的方法吗?

【问题讨论】:

    标签: docker docker-compose docker-swarm


    【解决方案1】:

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

    【讨论】:

    • 这很有帮助。长话短说,如果我想避免任何插件,我所做的就是不安装任何 3rd 方插件的唯一途径?
    • 是的,那么你需要使用你使用过的东西
    【解决方案2】:

    这是不可能的。您必须使用绑定挂载语法或卷语法。 compose config 顶层的卷不允许您混合两者。有关类似问题,请参阅 how to define a general mount point in docker compose

    【讨论】:

      猜你喜欢
      • 2019-02-08
      • 1970-01-01
      • 2019-07-08
      • 2020-03-20
      • 2016-11-10
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多