使用docker在一台计算机上模拟网络

使用docker在一台计算机上模拟网络,docker,dockerfile,Docker,Dockerfile,比方说,我有一个应用程序,它运行在一个网络中,在多台计算机上,通过网络与自身的其他实例进行通信。我想在一台机器上测试它,让每个实例都相信它在一台独立的计算机上运行,在一个网络中。如何通过docker实现这一点?正如上面评论中提到的“h”,网桥网络驱动程序为您实现这一点。此驱动程序是默认驱动程序,因此如果您在主机上运行多个容器,它们应该能够通过IP相互访问 如果需要DNS解析,则需要定义网桥网络,因为默认网桥网络不会为您提供此解析 详情见 下面是一个使用自定义网桥网络的简单演示: 创建网络: $

比方说,我有一个应用程序,它运行在一个网络中,在多台计算机上,通过网络与自身的其他实例进行通信。我想在一台机器上测试它,让每个实例都相信它在一台独立的计算机上运行,在一个网络中。如何通过docker实现这一点?

正如上面评论中提到的“h”,网桥网络驱动程序为您实现这一点。此驱动程序是默认驱动程序,因此如果您在主机上运行多个容器,它们应该能够通过IP相互访问

如果需要DNS解析,则需要定义网桥网络,因为默认网桥网络不会为您提供此解析

详情见

下面是一个使用自定义网桥网络的简单演示:

创建网络:

$ docker network create mynet
在该网络上启动一些命名容器:

$ docker run --rm -d --name one --net mynet nginx:latest
$ docker run --rm -d --name two --net mynet nginx:latest
从每个容器中,您应该能够解析并命中其他容器:

一->二:

$ docker exec -it one ping two
PING two (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.098 ms
...
二->一:

$ docker exec -it two ping one
PING one (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.192 ms
...
清理:

$ docker kill one two
$ docker network rm mynet

您可以使用网桥网络模式创建虚拟网络,并使用其域名将服务器指向服务器。系统应使用docker DNS解析器将名称映射到内部IP并提供通信。您尝试了什么?如果在同一网络上运行docker容器,则可以访问它们。使用docker compose您将获得相同的结果。您可以使用
docker machine
。使用
docker machine
可以创建多个
虚拟docker主机
,在单个主机上具有不同的
IP
s。您可以将其视为docker主机的虚拟机。