将docker容器内容映射到宿主机上

如果配置了卷映射后,宿主机上的 /www/wwwroot/openim-server 目录为空,这通常是因为:

  1. 目录优先级问题:当 Docker 启动容器时,如果宿主机上的目录已经存在且为空,会将容器内对应目录的内容隐藏,只有宿主机上的文件可见。因此,如果宿主机上的 /www/wwwroot/openim-server 目录为空,它会覆盖容器内 /openim-server 目录的内容,使你在宿主机上看到的是一个空文件夹。

  2. 初始目录内容未同步:当宿主机目录挂载到容器时,容器内的内容不会自动复制到宿主机上。换句话说,如果你希望在宿主机上看到容器内的文件,必须手动复制这些文件到宿主机目录中。

解决方法

你可以选择以下两种方法之一来解决这个问题:

方法 1: 先手动复制容器内的文件到宿主机
  1. 启动容器,不挂载卷:先启动容器,不配置 volumes,让容器内的 /openim-server 目录保持不变。

    docker-compose up -d
    
  2. 进入容器并复制文件到宿主机

    docker cp openim-server:/openim-server /www/wwwroot/openim-server
    
  3. 修改 docker-compose.yml,重新添加卷映射

    volumes:
      - /www/wwwroot/openim-server:/openim-server
    
  4. 重启容器

    docker-compose down
    docker-compose up -d
    
方法 2: 在宿主机上准备好文件夹内容
  1. 在宿主机上准备好文件内容:将你希望容器使用的文件手动放到 /www/wwwroot/openim-server 目录中。

  2. 启动容器,卷映射后生效:再次启动容器时,宿主机上的文件会覆盖容器内的文件。

总结

为了避免挂载卷后出现空文件夹的问题,建议在挂载之前手动复制容器内的文件到宿主机,或者先在宿主机上准备好需要的文件,这样可以确保在挂载卷后,你能够正确地在宿主机上查看和编辑这些文件。

Docker容器中的文件映射宿主机上是一个非常常见的需求,这通常用于从宿主机上的本地文件系统读取和持久化容器中的数据。因此,Docker提供了一种简单但有效的方式——被称为容器卷的功能进行文件映射容器卷是指一个目录,它被设计为可以与宿主机文件系统中的某个目录共享,以便在容器中持久化数据。Docker支持两种类型的卷:命名卷和匿名卷。 1. 命名卷:命名卷是创建的卷,它具有一个显式的名称,可以在容器启动时或通过命令行创建。对于这些类型的卷,我们需要在运行容器时通过-v选项提供宿主机容器文件系统之间的映射路径。 假设我们想将Docker容器数据映射到当前工作目录的"data"文件夹中,则使用下面的命令运行容器docker run -it -v "$(pwd)/data:/data" image_name 这将会将容器的“/data”文件夹映射到本地计算机上当前工作目录下的“data”文件夹。可以将此路径替换为任何路径,以满足我们的需求。 2. 匿名卷:另一方面,匿名卷不需要指定卷的名字,在容器运行期间自动生成,而且通常用于存储容器中的临时数据。可以通过-Dockerfile中的VOLUME指令创建匿名卷。 在Dockerfile中,可以使用以下命令创建匿名卷: VOLUME ["/data"] 这将创建一个名为“/data”的卷,该卷可以在容器运行期间自动生成。无需指定卷的名称和路径,Docker会自动处理它。 总而言之,通过将Docker文件夹映射宿主机上,我们可以使我们的容器拥有与宿主机相同的数据/文件,而不必每次重新安装容器。 通过使用卷,可以确保容器中的数据永久保存并且可供下次使用,避免数据丢失的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值