如何设置持久网络docker卷?

如何设置持久网络docker卷?

我正在寻找一种远离其运行的服务器的持久 Docker 存储选项。

我知道我可以使用命名卷和本地存储驱动程序挂载 CIFS 共享,但这些卷似乎只是绑定挂载,并且不受 docker 管理,因此您必须处理随之而来的用户权限问题。

理想情况下,这应该来自 docker-compose.yml。

我愿意接受任何可以在本地运行的目标,我可能会从我的 Windows 桌面运行它,但可以设置 iscsi 目标或任何真正需要的东西。目的是集中数据,以便更容易备份,这样我就可以专注于数据持久性,而不必担心虚拟机本身。我希望做到这一点,而不会因为仅使用命名的本地卷而使事情变得复杂。

提前感谢您提供的任何帮助!

答案1

好吧,所以我最终意识到,这对我来说不起作用并且破坏了我的容器的原因是因为容器包含 mongodb,而 mongodb 无法在这样的挂载上工作,为此有一个 Github 问题。

因此,下面的方法对我来说是可行的,因为它在本地运行大部分内容,但将备份文件夹安装到共享存储,这并不理想,因为我必须恢复备份,但也足够好,因为这对我的用例来说是一个简单的过程。

volumes:
  unifi:
  unifi_backup:
    driver_opts:
      type: cifs
      o: "username=DockerMounts,password=SuperSecurePassword,uid=1000,gid=1000"
      device: "//192.168.0.2/FastDockerVolumes/unifi/backup"

答案2

我最初直接在我的撰写文件中指定了 CIFS 卷,但后来意识到,在大多数情况下,由于您需要手动删除任何要重新配置的卷,因此最好使用外部定义的卷,这样您就不会在每次部署中都依赖 CIFS。

docker-compose 停止命名外部提供的卷,但我们可以通过要求将卷名称指定为环境变量来解决这个问题,大概在您的.env

services:
  my-service:
    volumes:
      - data:/mnt/data
volumes:
  data:
    name: "${DATA_VOLUME?}"
    external: true

然后使用以下命令手动创建卷:

# We might as well use the standard project-namespacing convention
DATA_VOLUME=compose-project_data
# N.B. you MUST use the addr option when relying on DNS resolution
docker volume create \
  --name $DATA_VOLUME \
  --driver local \
  --opt type=cifs \
  --opt "device=//remote.host/share/path" \
  --opt "o=addr=remote.host,domain=$DOMAIN,username=$USER,password=$PASS"

相关内容