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

nPn*_*nPn 24 docker dockerfile docker-compose

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

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

是否可以在特定位置安装命名卷的子目录?例如下面的东西,我试过,但似乎不起作用.

# Named volume
  - datavolume/sql_data:/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)

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

例如,在docker-compose.yml文件中

volumes:
  - datavolume:/data
Run Code Online (Sandbox Code Playgroud)

然后在容器Dockerfile中

RUN ln -s /data/sql_data /var/lib/mysql
Run Code Online (Sandbox Code Playgroud)

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

Von*_*onC 26

不,因为compose/config/config.py#load(config_details)检查是否datavolume/sql_data匹配命名卷(in compose/config/validation.py#match_named_volumes())

datavolume会,datavolume/sql_data不会.

正如memetech 在评论中指出的那样,自2017年4月以来跟踪此问题是一个问题:
moby/moby问题32582:" [feature]允许挂载命名卷的子目录 ".

  • 这个功能真棒.同时寻找相同的功能,而不是污染更多命名的卷. (5认同)
  • 该功能于2018年7月17日开放https://github.com/moby/moby/issues/32582 (2认同)