Docker容器文件同步疑问:容器内/tmp/logs能否同步至主机myfolder?
问题解答
不能,当前的Docker Compose配置无法实现将容器内/tmp/logs目录的文件同步到主机空目录myfolder的需求。
原因
Docker的绑定挂载(bind mount)机制是:当主机目录为空时,挂载后会直接覆盖容器内对应目录的内容,容器原有的/tmp/logs文件会被隐藏,而非同步到主机。
可行解决方案
方案一:先复制容器文件到主机再挂载
- 临时修改
docker-compose.yml,注释掉./myfolder:/tmp/logs这一行,启动容器:docker-compose up -d - 将容器内
/tmp/logs的文件复制到主机myfolder目录:docker cp $(docker-compose ps -q myserver):/tmp/logs/. ./myfolder/ - 停止容器:
docker-compose down - 恢复原
docker-compose.yml的挂载配置,重新启动容器。此时主机myfolder已有初始文件,后续容器写入/tmp/logs的内容会同步到主机。
方案二:使用命名卷初始化内容
- 修改
docker-compose.yml,用命名卷替换绑定挂载:version: "3.9" services: myserver: image: <some image> restart: always volumes: - ./res:/tmp/configs - logs_volume:/tmp/logs volumes: logs_volume: - 启动容器后,Docker会自动将容器内
/tmp/logs的初始文件同步到命名卷logs_volume中。 - 若需要将卷内文件同步到主机
myfolder,可执行:docker run --rm -v logs_volume:/source -v ./myfolder:/target busybox cp -a /source/. /target/
内容的提问来源于stack exchange,提问作者Rony Tesler
相关产品推荐
相关产品推荐

