我在一个Docker Bridge网络上有两个容器。其中一个有一个Apache服务器,我用它作为反向代理将用户转发到另一个容器上的服务器。另一个容器包含一个侦听端口8081的服务器。我已经验证了这两个容器在同一个网络上,当我登录到每个容器上的交互式shell时,我测试成功,我能够ping另一个容器。问题是,当我登录到带有Apache服务器的容器时,我无法ping到另一个容器中的实际服务器。
带有服务器的容器的IP地址是172.17.0.2
如何创建Docker网络
docker network create -d bridge jakeypoo
如何启动容器
docker container run -p 8080:8080 --network="jakeypoo" --
name="idpproxy" idpproxy:latest
docker run -p 8081:8080 --name geoserver --network="jakeypoo" geoserver:1.1.0
连接到服务器的URI不是
http://172.17.0.2:8081/
?
PS:我相信会需要更多的信息,我是新的堆栈溢出,并会很高兴地回答任何其他问题,我可以。
2条答案
按热度按时间r8xiu3jd1#
因为您在同一个
--network
上启动了两个容器,所以您可以使用它们的--name
作为主机名来相互通信。如果第二个容器中的服务正在侦听端口8080,请使用该端口号。使用docker run -p
选项的重新Map将被忽略,并且您不需要-p
选项来在容器之间通信。在Apache配置中,可以设置如下内容
查找容器专用IP地址通常没有什么用处:无论何时重新创建容器,它们都将更改,并且在大多数环境中,它们不能在Docker外部使用(在Docker内部,基于名称的查找更容易)。
(Were如果您在Docker Compose下运行此程序,它会自动为您创建一个网络,并且每个服务都可以在其Compose服务名称下访问。您不需要手动设置
networks:
或container_name:
选项,并且与docker run -p
选项一样,Composeports:
不是必需的,如果存在,将被忽略。Docker文档中的Networking in Compose对此进行了进一步描述。)bybem2ql2#
很可能这就是原因。
当您登录到其中一个容器时,该容器对其他容器网络一无所知。当您ping时,该容器会认为您正在尝试ping该容器内的服务。
如果你能在你的环境中使用docker compose,请尝试使用它。https://docs.docker.com/compose/