一尘不染

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

docker

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

例如:

volumes:#只需指定一个路径,然后让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

我开始沿着这条路走,但它变得凌乱,无法正常工作。在我放弃该方法或花费时间进行调试之前,我想确保没有办法仅指定已命名卷的子目录。


阅读 490

收藏
2020-06-17

共1个答案

一尘不染

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

datavolume会,datavolume/sql_data不会。

正如memetech在评论中指出的那样,这是自2017年4月以来跟踪此问题的问题:
moby/moby问题32582:“
[功能]允许安装命名卷的子目录 ”。

2020-06-17