在不同 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-machine
set-up 用于我的项目 B 的容器,它的 docker-compose.yml
和 Dockerfile
s。
我现在想在我的项目 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
【讨论】:
我已经尝试过这样的“外部”选项:在我的项目 Adocker-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 文件?