测试环境用下面这个 docker-compose.yml 即可
services:
ubuntu:
image: ubuntu:22.04
volumes:
# - volumeetc:/etc
- ./data/etc:/etc
command: tail -f /dev/null
volumes:
volumeetc:
我的问题是:
如果使用 数据卷 volumeetc
挂载到 容器 /etc
目录, 启动容器后, 这个数据卷里的数据是完整的 etc 目录内的数据;
如果使用宿主机目录比如 ./data/etc 挂载到容器内, 宿主机 ./data/etc 这个目录下的数据不完整, 只有 hostname, hosts, resolv.conf 这三个文件;
我在 linux, mac, windows 都测试过, 都是这个行为;
调整过宿主机目录相关权限, 尽量和容器内保持一致, 也不行
我的问题是 为什么会有这种差异?
我个人推测跟容器创建的初始化流程有关, 但是没找到什么文档
希望大佬指条路
1
lizon OP https://docs.docker.com/engine/storage/volumes/
查到官方文档有相关特性介绍 Populate a volume using a container If you start a container which creates a new volume, and the container has files or directories in the directory to be mounted such as /app/, Docker copies the directory's contents into the volume. The container then mounts and uses the volume, and other containers which use the volume also have access to the pre-populated content. 看来是个刻意设计的特性... GPT 问了一圈又一圈没回答到要点, 还是得翻文档才行 |
2
julyclyde 60 天前
从你这个 command 的写法来看……你可能没掌握容器的正确用法
(我这个回答和 volume 无关) |
3
julyclyde 60 天前
你自己找到的这个答案,没看出和你的提问有啥关系啊
你的提问不是缺了大部分文件吗? |