问题描述
在使用Docker的Compose功能时,遇到了一个问题:当使用绑定挂载将主机上的文件夹挂载到Docker容器中时,在使用docker-compose
命令运行的容器内,挂载的文件夹内容为空,但在直接使用docker run
命令运行的容器内,挂载的文件夹内容正常显示。用户想知道如何解决这个问题,确保主机上正确挂载的文件夹内容能够在Compose中的容器内正常显示。
解决方案
请注意以下操作可能会涉及版本差异,请谨慎操作并提前备份数据。
方案1 – 调整挂载的传播属性
在使用Docker的Compose功能时,与直接使用docker run
命令相比,可能存在一些默认设置上的差异,尤其是在绑定挂载的传播属性方面。你可以尝试通过在Compose文件中设置传播属性来解决这个问题。
- 打开你的
docker-compose.yml
文件。 - 在相关的服务部分(这里是
env
服务)的volumes
配置中,使用rslave
传播属性来确保挂载的内容能够在容器内正常显示。如果使用shared
属性可能也会有类似效果。
下面是示例的docker-compose.yml
片段:
version: "3.3"
services:
env:
image: debian:latest
volumes:
- "/home/quant:/root/host:rslave"
在上面的示例中,我们使用rslave
传播属性确保主机上的挂载在容器内正常显示。请根据你的实际需求进行适当的配置调整。
方案2 – 使用docker run
命令
如果你发现在使用docker-compose
命令时存在问题,而在使用docker run
命令时一切正常,你也可以考虑继续使用docker run
命令来启动容器。
- 打开终端窗口。
- 使用类似于以下命令来手动运行容器,并确保主机上的绑定挂载正常工作:
bash
docker run -v /home/quant/:/root/host debian:latest bash -c 'ls -al /root/host/code'
这将创建一个新的容器,手动指定绑定挂载并运行命令,确保挂载的文件夹内容正确显示在容器内。
注意事项
- 关于传播属性:在不同的Docker版本和操作系统中,可能存在默认的挂载传播属性差异。如果问题仍然存在,你可以尝试不同的传播属性配置,如
rslave
或shared
。 - 版本差异:Docker的不同版本可能存在一些行为上的差异,如果上述解决方案在你的环境中不起作用,你可以考虑升级Docker版本或根据你的实际情况进行调整。
- 备份数据:在进行任何可能影响文件或数据的操作之前,请务必备份你的数据,以免意外造成损失。
希望这些解决方案能够帮助你解决在Docker Compose中挂载文件夹内容不显示的问题。如果问题仍然存在,你可以尝试查阅Docker和Compose的官方文档,以获取更多关于挂载和容器配置的信息。