java.net.ConnectException:两个微服务之间通过docker的连接被拒绝
我有两个微型服务。一个名为“配置服务”,另一个名为“发送方服务”。REST之后的第一个可以下载配置。在本地,使用(Intellij)环境,服务通信没有任何问题。当我尝试使用Docker通过rest从一个服务下载任何内容到另一个服务时,问题就出现了。 此外,在运行配置服务后,我可以在浏览器中轻松检索值数据 然而,当我运行下面的撰写时,我得到了一个类似于标题中的错误。 在其余的线程中,我只找到了来自“网络”的一个建议,但它不起作用 总之,只有使用docker时才会出现通信问题,这样就消除了代码的问题 第一个dockerfile:java.net.ConnectException:两个微服务之间通过docker的连接被拒绝,java,docker,api,rest,microservices,Java,Docker,Api,Rest,Microservices,我有两个微型服务。一个名为“配置服务”,另一个名为“发送方服务”。REST之后的第一个可以下载配置。在本地,使用(Intellij)环境,服务通信没有任何问题。当我尝试使用Docker通过rest从一个服务下载任何内容到另一个服务时,问题就出现了。 此外,在运行配置服务后,我可以在浏览器中轻松检索值数据 然而,当我运行下面的撰写时,我得到了一个类似于标题中的错误。 在其余的线程中,我只找到了来自“网络”的一个建议,但它不起作用 总之,只有使用docker时才会出现通信问题,这样就消除了代码的问题
FROM adoptopenjdk/openjdk11:latest
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8888
ENTRYPOINT ["java","-jar","/app.jar"]
第二:
FROM adoptopenjdk/openjdk11:latest
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8889
ENTRYPOINT ["java","-jar","/app.jar"]
Docker compose:
version: '3.1'
services:
configuration-service:
image: configuration:latest
container_name: configuration-service
ports:
- "8889:8889"
restart: always
networks:
- common-network
sender-service:
image: sender:latest
container_name: sender-service
ports:
- "8888:8888"
restart: always
networks:
- common-network
networks:
common-network:
driver: bridge
提前感谢您提供的任何提示我想@OneCricketeer已经发现了这个问题 如果运行这两个容器(在Docker之外),则需要以
--net=host
或类似方式运行它们,以便它们都绑定到主机端口,以便一个可以通过localhost:${PORT}
访问另一个
如果在Docker Compose下运行容器,它们将无法作为localhost
访问,而是分别作为configuration service
和sender service
访问(假设服务确实绑定到这些端口)
注意组合端口
功能仅与绑定到主机网络的进程相关。从主机上,您应该能够确认对8888
和8889
上的这些服务的访问,因为端口但是这对于确保配置服务
和发送方服务
能够相互通信是不必要的
我认为@OneCricketeer已经发现了这个问题
如果运行这两个容器(在Docker之外),则需要以--net=host
或类似方式运行它们,以便它们都绑定到主机端口,以便一个可以通过localhost:${PORT}
访问另一个
如果在Docker Compose下运行容器,它们将无法作为localhost
访问,而是分别作为configuration service
和sender service
访问(假设服务确实绑定到这些端口)
注意组合端口
功能仅与绑定到主机网络的进程相关。从主机上,您应该能够确认对8888
和8889
上的这些服务的访问,因为端口但是这对于确保配置服务
和发送方服务
能够相互通信是不必要的
您可能会提供如下url,以便与侦听端口8889的服务通信:
localhost:8889/path
localhost在每个容器中的含义不同,请尝试以下方式:
配置服务:8889/path
可能您提供这样的url来与侦听端口8889的服务通信:
localhost:8889/path
localhost在每个容器中的含义不同,请尝试以下方式:
配置服务:8889/path
如果您显示实际的stacktrace“在本地,它们通信没有问题”。。。那么,您使用的是localhost吗?如果是这样,那么问题在于代码,因为这在Docker中不起作用。如果您显示实际的stacktrace,“在本地,它们的通信没有问题”。。。那么,您使用的是localhost吗?如果是这样,那么问题在于代码,因为这在docker中不起作用。为什么我可以通过浏览器使用localhost,并且结果是正确的?@kamilwilk,因为您通过指定此8889:8889
在docker compose中添加了配置服务localhost和主机之间的映射。那么为什么我可以通过浏览器使用localhost,结果是正确的吗?@kamilwilk,因为您通过指定此8889:8889
在docker compose中添加了配置服务localhost和主机之间的映射。