我们可以在docker中挂载命名卷的子目录吗?

时间:2016-07-02 22:21:33

标签: docker docker-compose dockerfile

docker-compose文件https://docs.docker.com/compose/compose-file/#/volumes-volume-driver显示了相对于撰写文件挂载主机子目录的各种方法。

例如:

  

卷:#只需指定一个路径,让Engine创建一个卷      - / var / lib / mysql

     

#指定绝对路径映射      - / opt / data:/ var / lib / mysql

     

主机上的路径,相对于Compose文件      - ./cache:/tmp/cache

     

#用户相对路径      - 〜/ configs:/ etc / configs /:ro

     

#命名量      - datavolume:/ var / lib / mysql

是否可以在指定位置安装指定卷的子目录?例如下面的内容,我试过,但似乎没有用。

# Named volume
  - datavolume/sql_data:/var/lib/mysql

我假设我可以通过将数据卷安装到/data之类的位置然后在每个容器的Dockerfiles中来管理这个,创建从子目录到位置的符号链接。

例如在docker-compose.yml文件中

volumes:
  - datavolume:/data

然后在容器Dockerfile

RUN ln -s /data/sql_data /var/lib/mysql

我开始沿着这条路走下去,但它变得凌乱而且无法正常工作。在我放弃这种方法或投入时间调试它之前,我想确保没有办法只指定命名vollume的子目录。

1 个答案:

答案 0 :(得分:21)

否,因为compose/config/config.py#load(config_details)检查datavolume/sql_data是否与指定的卷匹配(在compose/config/validation.py#match_named_volumes()中)

datavolume会,datavolume/sql_data不会。

由于memetech指出in the comments,因此自2017年4月开始追踪这一问题: moby/moby issue 32582:" [功能]允许挂载指定卷的子目录"。