解决Docker容器中绑定挂载无法在Compose中显示的问题

107次阅读
没有评论

问题描述

在使用Docker的Compose功能时,遇到了一个问题:当使用绑定挂载将主机上的文件夹挂载到Docker容器中时,在使用docker-compose命令运行的容器内,挂载的文件夹内容为空,但在直接使用docker run命令运行的容器内,挂载的文件夹内容正常显示。用户想知道如何解决这个问题,确保主机上正确挂载的文件夹内容能够在Compose中的容器内正常显示。

解决方案

请注意以下操作可能会涉及版本差异,请谨慎操作并提前备份数据。

方案1 – 调整挂载的传播属性

在使用Docker的Compose功能时,与直接使用docker run命令相比,可能存在一些默认设置上的差异,尤其是在绑定挂载的传播属性方面。你可以尝试通过在Compose文件中设置传播属性来解决这个问题。

  1. 打开你的docker-compose.yml文件。
  2. 在相关的服务部分(这里是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命令来启动容器。

  1. 打开终端窗口。
  2. 使用类似于以下命令来手动运行容器,并确保主机上的绑定挂载正常工作:

bash
docker run -v /home/quant/:/root/host debian:latest bash -c 'ls -al /root/host/code'

这将创建一个新的容器,手动指定绑定挂载并运行命令,确保挂载的文件夹内容正确显示在容器内。

注意事项

  1. 关于传播属性:在不同的Docker版本和操作系统中,可能存在默认的挂载传播属性差异。如果问题仍然存在,你可以尝试不同的传播属性配置,如rslaveshared
  2. 版本差异:Docker的不同版本可能存在一些行为上的差异,如果上述解决方案在你的环境中不起作用,你可以考虑升级Docker版本或根据你的实际情况进行调整。
  3. 备份数据:在进行任何可能影响文件或数据的操作之前,请务必备份你的数据,以免意外造成损失。

希望这些解决方案能够帮助你解决在Docker Compose中挂载文件夹内容不显示的问题。如果问题仍然存在,你可以尝试查阅Docker和Compose的官方文档,以获取更多关于挂载和容器配置的信息。

正文完