是否可以在docker-compose中使用volume / mount从远程主机挂载目录

时间:2020-07-20 09:33:01

标签: docker ubuntu docker-compose

经过长时间的搜索,我是否能找到问题的答案或解决方案,是否可以在docker-compose中装载或使用卷来绑定来自远程主机的目录?

示例始终使用本地目录或卷。

为了阐明这一点:我尝试建立一个蓝绿色的部署,其中一个数据库与另一个虚拟机(然后是2个应用服务器)建立在不同的VM上。该应用程序及其组件将使用docker进行部署,并且还需要访问将要保存内容的目录,因此蓝色和绿色都可以访问此保存的文件。我的想法是在数据库服务器上创建此目录,因为将以相同的方式使用该目录。现在,我尝试在docker-compose中安装或使用卷语法,以便后端容器可以访问db服务器上的目录。如果需要的话,需要访问目录的容器基于ubuntu映像。

这是正确的方法吗?然后如何在docker-compose.yml或Dockerfile中分配它?还是有更好的方法来做到这一点?

预先感谢

1 个答案:

答案 0 :(得分:0)

Docker允许您使用本地卷驱动程序将文件系统挂载到容器中,以使用mount syscall可以访问任何内容。 syscall与Linux中的mount命令几乎相同。但是,当您执行类似NFS挂载的操作时,您会看到mount命令如何将该命令预处理到系统调用中。

以下是在docker中执行NFS卷挂载的不同方法的一些示例:

  # create a reusable volume
  $ docker volume create --driver local \
      --opt type=nfs \
      --opt o=nfsvers=4,addr=nfs.example.com,rw \
      --opt device=:/path/to/dir \
      foo

  # or from the docker run command
  $ docker run -it --rm \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=nfs.example.com\",volume-opt=device=:/host/path \
    foo

  # or to create a service
  $ docker service create \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=nfs.example.com\",volume-opt=device=:/host/path \
    foo

  # inside a docker-compose file
  ...
  volumes:
    nfs-data:
      driver: local
      driver_opts:
        type: nfs
        o: nfsvers=4,addr=nfs.example.com,rw
        device: ":/path/to/dir"
  ...

有关所有选项和潜在陷阱的更多详细信息,请参见this answer上的类似问题。