apache Docker网络:如何让container1与container2中的服务器通信

9nvpjoqh  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(123)

我在一个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:我相信会需要更多的信息,我是新的堆栈溢出,并会很高兴地回答任何其他问题,我可以。

r8xiu3jd

r8xiu3jd1#

因为您在同一个--network上启动了两个容器,所以您可以使用它们的--name作为主机名来相互通信。如果第二个容器中的服务正在侦听端口8080,请使用该端口号。使用docker run -p选项的重新Map将被忽略,并且您不需要-p选项来在容器之间通信。
在Apache配置中,可以设置如下内容

ProxyPass "/" "http://geoserver:8080/"
ProxyPassReverse "/" "http://geoserver:8080/"

查找容器专用IP地址通常没有什么用处:无论何时重新创建容器,它们都将更改,并且在大多数环境中,它们不能在Docker外部使用(在Docker内部,基于名称的查找更容易)。
(Were如果您在Docker Compose下运行此程序,它会自动为您创建一个网络,并且每个服务都可以在其Compose服务名称下访问。您不需要手动设置networks:container_name:选项,并且与docker run -p选项一样,Compose ports:不是必需的,如果存在,将被忽略。Docker文档中的Networking in Compose对此进行了进一步描述。)

bybem2ql

bybem2ql2#

很可能这就是原因。
当您登录到其中一个容器时,该容器对其他容器网络一无所知。当您ping时,该容器会认为您正在尝试ping该容器内的服务。
如果你能在你的环境中使用docker compose,请尝试使用它。https://docs.docker.com/compose/

相关问题