gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:38:20 24 4
gpt4 key购买 nike

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

例如:

volumes:
# Just specify a path and let the Engine create a volume
- /var/lib/mysql

# Specify an absolute path mapping
- /opt/data:/var/lib/mysql

# Path on the host, relative to the Compose file
- ./cache:/tmp/cache

# User-relative path
- ~/configs:/etc/configs/:ro

# Named volume
- 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

我开始走这条路,但它变得一团糟,无法正常工作。在我放弃这种方法或花时间调试它之前,我想确保没有办法只指定命名卷的子目录。

最佳答案

不,因为 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 : "[feature] 允许挂载命名卷的子目录"。

在那个问题中,Joohansson添加(see comment)

In the meantime, I use this workaround to mount the whole volume on a separate path and then symlink it to the sub path.

# In the Dockerfile:
RUN mkdir -p /data/subdir
RUN ln -s /data/subdir /var/www/subdir

Then mount the volume as normal.
The /subdir must exist in the volume.

docker run -d -v myvol:/data mycontainer

Now anything read or written by the webserver will be stored in the volume subdir and can't access the other data.

关于docker - 我们可以在 docker 中挂载命名卷的子目录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38164939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com