我对Docker很新,所以可能只是我误解了一些东西。我们正在使用SDK开发一个系统,这个SDK依赖于我们拥有图像tar文件的2个Docker服务。这两个映像都在端口8080上公开了REST API。
我按照我们提供的说明运行了容器。 SDK连接到一个服务(A),服务A使用服务B.运行A时提供的选项之一是用于连接到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返回到其他服务是错误的吗?
答案 0 :(得分:0)
我想SDK会从服务A收到到达http://localhost:8080/...
服务B的URL,因为当要求服务B提供资源的URL时,它会将此IP:端口提供给客户端(服务A,在此case)因为服务实际上是在这个URL上(在容器内)提供资源。
如果要更改此行为,因此SDK可以通过端口8081访问服务B,您应该更改容器内部公开的端口服务B.因此,当服务B被要求提供资源时,它将回答它资源在端口8081上的某个URL上。
关于主机无法解析service-b-container-name
,只能通过该名称访问服务B的是同一个docker网络上的服务而不是服务B.主机可以通过绑定端口到达docker服务和容器。
希望它有所帮助;)