gpt4 book ai didi

docker - 如何使用 docker-compose 将 docker 容器相互链接

转载 作者:IT老高 更新时间:2023-10-28 12:38:05 25 4
gpt4 key购买 nike

我必须使用 docker-compose 设置一个 mongo 副本集。对于副本集,容器必须相互了解。

我在 docker-compose.yml

中试过
    dbreplicasetpart1:
image: mongo:2.6.8
expose:
- '27018'
links:
- replicasetpart2
- replicasetpart3
cap_add:
- NET_ADMIN

dbreplicasetpart2:
image: mongo:2.6.8
links:
- replicasetpart1
- replicasetpart3
expose:
- '27019'
cap_add:
- NET_ADMIN
...

我收到一条循环导入消息。但是,如果我删除到 dbreplicasetpart1 的反向链接,我就无法从 dbreplicasetpart2 ping 到 dbreplicasetpart1。解决办法是什么?

最佳答案

已针对 Docker 1.10 更新

Docker 1.10 允许在 compose 文件中定义网络。这是更新的代码

version: "2"

services:
replica1:
image: mongo:2.6.8
container_name: replica1
networks:
- my-net
ports:
- "27018"
environment:
REPLICA2_URL: "http://replica2:27019"
replica2:
image: mongo:2.6.8
container_name: replica2
networks:
- my-net
ports:
- "27019"
environment:
REPLICA1_URL: "http://replica1:27018"

networks:
my-net:
driver: bridge

Docker 1.9 的上一个答案

从 Docker 1.9 开始,解决方案是创建一个自定义网络并将其传递给 docker-compose up 命令。

  1. 创建网络
    docker network create --driver bridge my-net

  2. 在 docker-compose.yml 文件中将该网络作为环境变量 (${NETWORK}) 引用。例如:

```

replica1:
image: mongo:2.6.8
container_name: replica1
net: ${NETWORK}
ports:
- "27018"
environment:
REPLICA2_URL: "http://replica2:27019"

replica2:
image: mongo:2.6.8
container_name: replica2
net: ${NETWORK}
ports:
- "27019"
environment:
REPLICA1_URL: "http://replica1:27018"

```

注意http://replica1:27018中的replica1会解析为replica1服务(容器)的ip地址。无需硬编码 IP 地址;副本 1 的条目会自动添加到副本 2 容器的/etc/host 中。 replica1 容器也是如此。 Docker 会在它的/etc/host 文件中为 replica2 添加一个条目。

  1. 调用 docker-compose,将您创建的网络传递给它
    NETWORK=my-net docker-compose up -d -f docker-compose.yml

我创建了一个 bridge network 以上仅适用于一个节点(主机)。对开发人员有好处。如果你需要让两个节点互相通信,你需要创建一个 overlay network 。不过原理一样。您将网络名称传递给 docker-compose up 命令。

关于docker - 如何使用 docker-compose 将 docker 容器相互链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29307645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com