【问题标题】:Docker volume mount issue to a mounted folderDocker 卷安装问题到已安装的文件夹
【发布时间】:2021-05-08 15:37:01
【问题描述】:

我们使用 (docker-compose) 将 Linux 机器中的一个文件夹安装到我们的 docker 容器应用程序中 卷: - /mnt/share:/mnt/share

/mnt/share 是机器中的挂载文件夹(不是机器中的真实文件夹,它是我们的文件服务器)。如果由于某种原因挂载丢失,然后再次重新挂载。 在容器重新启动之前,在 docker 容器中运行的应用程序无法访问挂载的文件夹。

【问题讨论】:

  • 无论你用什么来重新挂载卷,你都可以用它来重启容器……容器被设计成可以经常重启。
  • @root 但是实现远程逻辑的团队还没有准备好编写脚本来重新启动容器:(。所以我们以不同的方式实现它。

标签: docker unix docker-compose mount mounted-volumes


【解决方案1】:

您可能希望使用卷驱动程序而不是绑定挂载本地文件系统。 见Share data among machines

如果不进一步了解您的环境,就不可能给出更详细的答案。了解您的容器是在 AWS 数据中心运行还是使用 nfsv3、nfsv4 或 cifs 进行挂载会很有帮助。

【讨论】:

  • 只是添加到此答案的附加评论,如果由于某种原因您不能使用卷驱动程序,另一个不错的选择是将您的网络安装视为“可移动存储”并使用类似 autofs在下次访问时自动重新连接它们。 wiki.debian.org/AutoFs
【解决方案2】:

以下解决方案帮助我继续。 我写了一个脚本来检查文件夹是否存在。 然后在 docker-compose 文件中调用该脚本。

   version:"3" 
  services:
   flowable-task-handler:
    build: flowable-task-handler  
    ports:
    - "8085:8085"
    command: bash -c "/wait_for_file_mount.sh /mnt/share/fileshares/ && java -jar /app.jar"

wait_for_file_mount.sh

#!/bin/sh
# Used to check whether the mount folder is ready for flowable to use
mountedfolder="$1"
until [  -d "$mountedfolder" ];
 do sleep 2;
  echo error "Mounted folder not found : $mountedfolder";
   done;

它是一个弹簧启动应用程序。我已删除 DockerFile 中的入口点,并使用 docker compose(java -jar /app.jar") 中的命令启动应用程序

【讨论】:

    【解决方案3】:

    将挂载传播定义为“:shared”应该可以解决这个问题:

    -v /autofs:/autofs:shared \

    不确定 docker-compose - 我并没有真正使用它。但是您可以定义一个带有挂载传播的 docker 卷并将其放入您的 DC 文件中。

    【讨论】:

      猜你喜欢
      • 2015-11-15
      • 2017-09-10
      • 2016-03-25
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      相关资源
      最近更新 更多