无法获得两个容器(在两个不同的网络中)互相交谈

正如您在下图中看到的那样,有两个容器,每个容器包含一个容器。我试图让这两个容器相互交谈,但迄今尚未完成。无法获得两个容器(在两个不同的网络中)互相交谈

$ docker -v 

Docker version 17.09.0-ce, build afdb6d4

这是我做的那么远。

1.创建两个网络。

$ docker network create --subnet 192.168.1.0/24 --driver bridge net_1 

$ docker network create --subnet 192.168.2.0/24 --driver bridge net_2

列表

NETWORK ID   NAME   DRIVER    SCOPE 

8a9ae0d69c9c net_1 bridge local

e8a8460784d0 net_2 bridge local

检查细节

  • net_1
  • net_2

2.创建容器。

$ docker run -i -t -d -p 5011:80 --network=net_1 --ip 192.168.1.11 --name=app_1_con app_1_img 

$ docker run -i -t -d -p 5022:80 --network=net_2 --ip 192.168.2.22 --name=app_2_con app_2_img

列表

ID IMAGE  COMMAND  STATUS PORTS     NAMES 

f6 app_1_img "/bin/bash" Up 0.0.0.0:5011->80/tcp app_1_con

0a app_2_img "/bin/bash" Up 0.0.0.0:5022->80/tcp app_2_con

检验细节

  • app_1_con
  • app_2_con

测试

这两个命令在最后挂起并死亡。

$ docker exec -it app_1_con ping 192.168.2.22 

PING 192.168.2.22 (192.168.2.22) 56(84) bytes of data.

$ docker exec -it app_2_con ping 192.168.1.11

PING 192.168.1.11 (192.168.1.11) 56(84) bytes of data.

回答:

用下面的命令创建一个码头工人,compose.yml文件:

version: "3.4" 

services:

app_1:

image: alpine:3.7

container_name: app_1_con

ports:

- "5011:80"

networks:

net_1:

ipv4_address: "192.168.1.11"

net_2:

ipv4_address: "192.168.2.11"

command: ping 192.168.2.22

app_2:

image: alpine:3.7

container_name: app_2_con

ports:

- "5022:80"

networks:

net_2:

ipv4_address: "192.168.2.22"

command: tail -f /dev/null # this keeps the container running

networks:

net_1:

driver: bridge

ipam:

driver: default

config:

- subnet: 192.168.1.0/24

net_2:

driver: bridge

ipam:

driver: default

config:

- subnet: 192.168.2.0/24

然后使用运行示例:docker-compose up 和使用Ctrl-C停止容器。

详情:

首先开始使用泊坞窗撰写当事情是什么,但微不足道。它使维护和理解变得更容易。

正如您应该看到的,您需要将一个容器作为另一个容器的一部分。这是添加网络安全性的一种非常常见的模式。例如:

-----> nginx --------> app server -------> db 

pub + priv priv priv

networks network network

只有你的web代理需要在公共网络(一个由ports属性暴露)英寸您的应用程序服务器和数据库可以位于无法从外部访问的专用网络中。 Nginx是唯一需要成为两个网络的一部分的容器。

还有一点,Docker守护进程有它自己的DNS解析器,所以你不需要通过IP来引用容器。只需使用他们的service名称。例如,而不是

command: ping 192.168.2.22 

只需使用

command: ping app_2 

回答:

这是因为有网_1和网_2之间没有路由,

一种选择是把它们放在同一个网络像这样的:

$ docker run -i -t -d -p 5011:80 --network=net_1 --ip 192.168.1.11 --name=app_1_con app_1_img 

$ docker run -i -t -d -p 5022:80 --network=net_1 --ip 192.168.1.10 --name=app_2_con app_2_img

我通常把容器,应互相沟通在相同的网络,

实施例:

1)第一应用(应用1):

component1_app1在backend_app1_net

component2_app1在backend_app1_net

2)第2应用(应用):

component1_app2在backend_app2_net

component2_app2在backend_app2_net

3)注意事项:

如果我想要的component1_app1与APP2的所有组件进行通信,我w生病也连线他backend_app2_net,

如果我想要的component1_app1只有component2_app2沟通我想创建一个新的网络,我会连线component1_app1和component2_app2它。

回答:

运行两个容器时,可以使用默认桥接网络。或者用docker network create创建一个网络。然后这两个容器使用网络。

以上是 无法获得两个容器(在两个不同的网络中)互相交谈 的全部内容, 来源链接: utcz.com/qa/258470.html

回到顶部