我对docker和容器没有任何实用性,但据我所知。
根据网上提供的文件,我没有得到关于同时运行两个或更多容器的详细信息。
Docker允许容器将容器的端口地址映射到主机。 现在,问题是我们可以在docker上同时运行多个容器吗?如果是,那么如果两个容器映射到相同的端口号,那么在这种情况下如何处理端口?
出于好奇,码头上的两个容器可以相互通信吗?
答案 0 :(得分:2)
是的,您可以在一台主机上运行多个容器; docker就是为此而设计的。
您无法将两个不同图像的容器映射到同一个端口号;如果你尝试,你会收到错误回复。但是,如果您的容器运行相同的映像(例如,Web应用程序的2个实例),您可以将它们作为服务运行,并将它们暴露在同一端口上。 Docker将对请求进行负载平衡。您可以详细了解services here或关注Get Started (Part 3, services) here
是的,单个主机上的容器可以按容器名称相互通信。例如,如果您有一个运行名为 mongo 的MongoDB容器,另一个运行名为webserver的Node.js容器,则Web服务器容器可以使用名称 mongo 连接到数据库,例如db.Connect("mongodb://mongo:27017/testdb")
。
答案 1 :(得分:2)
我们可以在主机中一次运行一个以上的Docker,但是我们会遇到将同一个端口绑定到docker的限制;所以为了解决这个问题,我们需要将主机中的不同端口绑定到docker,如果你正在运行mongo-db,那么它的默认端口是27017,所以我们可以为Docker D1和-p运行两个mongo-db -p 27017:27017 Docker D2为27018:27017,Docker D3为270:27017;像这样你可以绑定不同的主机端口映射到27017 for mongo-db port;现在您的问题是如何从主机管理此端口,然后我建议您使用nginx在主机中进行端口管理。
来到您的下一个问题所有码头工人都连接到默认的docker0桥接网络,因此我们可以连接到任何连接到默认桥接器'docker0'网络的码头工人;如果我是对的,它将带有172.x.x.x网络的ipaddress。进入docker并运行'ip addr'以查看分配给dockers的ip-address,然后通过运行ping命令测试连接。
答案 2 :(得分:0)
是的,两个容器可以同时运行,它们也可以彼此通信,您可以定义自己的网络,并且它们可以彼此通信。如果两个容器有其专用端口,它们是它们的内部端口,则一个容器端口不会与另一个容器端口冲突。如果要将端口公开给主机,则必须发布端口。