Docker中运行的服务将URL返回到不同容器中的另一个服务
我对Docker很陌生,所以可能是我误解了什么。我们正在使用SDK开发一个系统,这个SDK依赖于2个Docker服务,我们有图像的tar文件。这两个映像都公开了端口8080上的REST API 我已经按照提供给我们的指示运行了集装箱。SDK连接到一个服务(A),服务A使用服务B。运行A时提供的选项之一是连接到B的URL 我使用的URL是Docker中运行的服务将URL返回到不同容器中的另一个服务,docker,docker-networking,Docker,Docker Networking,我对Docker很陌生,所以可能是我误解了什么。我们正在使用SDK开发一个系统,这个SDK依赖于2个Docker服务,我们有图像的tar文件。这两个映像都公开了端口8080上的REST API 我已经按照提供给我们的指示运行了集装箱。SDK连接到一个服务(A),服务A使用服务B。运行A时提供的选项之一是连接到B的URL 我使用的URL是http://service-b-container-name:8080(按照提供的说明中的规定) 服务A上的API似乎在返回服务B上资源的URL,然后我们的应用
http://service-b-container-name:8080
(按照提供的说明中的规定)
服务A上的API似乎在返回服务B上资源的URL,然后我们的应用程序(在主机上运行)中的SDK试图直接连接到服务A。然后失败,因为我在不同的端口上公开了服务A(因为服务B是在8080上公开的,所以我将8081用于服务A)但主机也无法解析service-b-container-name
我可以通过交换暴露的端口并将service-b-container-name
添加到主机的hosts
文件来运行它,以解析为127.0.0.1,但是这样做似乎是错误的
我能做些什么吗?或者是服务将URL返回到另一个服务是错误的吗?我猜SDK从服务A接收URL,然后在
http://localhost:8080/...
因为当要求服务B提供资源的URL时,它会将此IP:端口提供给客户端(在本例中为服务a)因为服务实际上是在这个URL(容器内)上为资源提供服务
如果您想要更改此行为,以便SDK可以通过端口8081访问服务B,那么您也应该更改容器中暴露的端口服务B。因此,当服务B被要求提供资源时,它会回答说它的资源位于端口8081上的某个URL上
关于主机无法解析service-b-container-name
,只能通过该名称访问服务b的是与服务b位于同一docker网络上的服务。主机可以通过绑定端口访问docker服务和容器
希望有帮助;)