在Docker上可以同时运行两个或更多容器吗?

5
我从未实践过Docker和容器,但根据我的了解。
根据在线文档,在同一时间运行两个或更多的容器的细节没有得到详细说明。
Docker允许容器将容器的端口地址映射到主机上。那么问题是,我们可以在Docker上同时运行多个容器吗?如果是,则如果两个容器映射到相同的端口号,则端口如何处理?
此外,出于好奇,Docker上的两个容器是否可以相互通信?
3个回答

5

是的,您可以在单个主机上运行多个容器;Docker就是为此而设计的。

您不能将不同镜像的两个容器映射到相同的端口号;如果尝试这样做,将会收到错误响应。但是,如果您的容器运行相同的镜像(例如,两个webapp实例),则可以将它们作为服务运行,并使它们暴露在同一端口上。Docker将负载均衡请求。您可以阅读有关服务的更多信息或者按照入门指南(第3部分,服务)进行操作。

是的,单个主机上的容器可以通过容器名称互相通信。例如,如果您有一个名为mongo的MongoDB容器和另一个名为webserver的Node.js容器,则webserver容器可以使用名称mongo连接数据库,例如db.Connect("mongodb://mongo:27017/testdb")


2
我们可以在一台主机上同时运行多个Docker,但是我们会遇到将相同端口绑定到Docker的限制;所以为了解决这个问题,我们需要将主机上的不同端口绑定到Docker。例如,如果您正在运行Mongo-DB,则其默认端口为27017,因此我们可以运行两个Mongo-DB,如-p 27017:27017用于Docker D1和-p 27018:27017用于Docker D2,5000:27017用于docker D3;像这样,您可以绑定不同的主机端口以映射到mongo-db端口27017;现在您的问题是如何从主机管理这些端口,那么我建议您使用nginx来管理主机上的端口。

接下来回答您的问题:所有的Docker都连接到默认的docker0桥接网络,所以我们可以连接到任何连接到默认桥接'docker0'网络的Docker;如果我没记错,它将带有172.x.x.x网络的IP地址。进入Docker并运行“ip addr”命令以查看分配给Docker的IP地址,并可以通过运行ping命令来测试连接。


我正在尝试使用Ghost进行操作,但我无法连接到映射到不同主机端口的第二个实例。 - chovy

0

是的,两个容器可以同时运行,它们也可以相互通信,您可以定义自己的网络并使它们相互通信。如果两个容器有它们自己的私有端口,那么它们的内部端口不会与另一个容器的端口冲突。如果您想将端口暴露给主机,则必须发布端口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接