在不同 docker-compose 文件中描述并在不同 docker-machines 中运行的容器之间创建 NFS 共享

Posted

技术标签:

【中文标题】在不同 docker-compose 文件中描述并在不同 docker-machines 中运行的容器之间创建 NFS 共享【英文标题】:Create a NFS share between containers described in different docker-compose files and running in different docker-machines 【发布时间】:2018-10-24 08:25:50 【问题描述】:

我的电脑中有以下设置:

为我的项目 A 的容器设置一个 docker-machine。我有我的 docker-compose.yml 文件,描述必须构建哪些容器、要挂载的卷等,以及每个容器的 Dockerfile . 另一个 docker-machineset-up 用于我的项目 B 的容器,它的 docker-compose.ymlDockerfiles。

我现在想在我的项目 A 中的一个容器(我们称之为容器 1)和我的项目 B 中的另一个容器(容器 2)之间进行 NFS 共享。

我正在检查this 之类的链接,但据我了解,这是针对同一网络中的容器的。在这种情况下,我的容器 1 和容器 2 不在同一个网络中,它们在不同的机器上。

在运行docker-machine 或我的docker-compose.yml 文件时,我没有指定任何网络选项(除了公开我的应用程序使用的端口)。

如何在这 2 个容器之间进行 NFS 共享?

【问题讨论】:

所以你在 NAT 后面有两台不同的 vm 机器,你是否尝试过为两者使用桥接网络?您应该尝试解决此问题,然后解决 NFS 问题。 【参考方案1】:

'docker-compose up' 命令创建一个名为 [projectname]_default" 的网络,并且 docker-compose.yml 文件中指定的所有服务都将映射到创建的网络。

例如,假设您的应用位于名为 myapp 的目录中,并且您的 docker-compose.yml 如下所示:

 version: "3"
 services:
    web:
      build: .
      ports:
        - "8000:8000"
    db:
      image: postgres
      ports:
         - "8001:5432"

当你运行 docker-compose up 时,会发生以下情况:

 1) A network called myapp_default is created.
 2) A container is created using web’s configuration. It joins the network myapp_default under the name web.
 3) A container is created using db’s configuration. It joins the network myapp_default under the name db.

如果您希望其他服务使用已创建的现有 docker 网络,那么您需要使用“外部”选项来定义它

使用预先存在的网络

如果您希望容器加入预先存在的网络,请使用外部选项:

networks:
   default:
     external:
       name: my-pre-existing-network

Compose 不会尝试创建名为 [projectname]_default 的网络,而是会查找名为 my-pre-existing-network 的网络并将应用的容器连接到该网络。

来源:https://docs.docker.com/compose/networking/#use-a-pre-existing-network

【讨论】:

我已经尝试过这样的“外部”选项:在我的项目 A docker-compose.yml 文件中,我创建了一个网络 test,并添加了我想说网络的容器,并且在项目 B docker-compose.yml 文件中,我使用了外部选项,但 Composer 抱怨说:Network test declared as external, but could not be found. Please create the network manually using docker network create frontback`` and try again. 你能分享一下'docker network ls'的输出吗?

以上是关于在不同 docker-compose 文件中描述并在不同 docker-machines 中运行的容器之间创建 NFS 共享的主要内容,如果未能解决你的问题,请参考以下文章

使用 docker-compose 时导入 keycloak 配置文件

docker-compose 连接来自 LAN 上不同设备的服务器/客户端容器

如何在从 docker-compose 调用的 .sh 文件中使用 .NET Core 机密

如何在 AWS Elastic Container Service 中使用现有的 docker-compose.yml 文件?

Docker Compose:将 docker-compose.yml 中的不同服务部署到不同的主机集

Docker-compose 与 redis、sidekiq、rails SocketError