Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker中运行的服务将URL返回到不同容器中的另一个服务_Docker_Docker Networking - Fatal编程技术网

Docker中运行的服务将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,然后我们的应用

我对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,然后我们的应用程序(在主机上运行)中的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服务和容器

希望有帮助;)