Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
java.net.ConnectException:两个微服务之间通过docker的连接被拒绝_Java_Docker_Api_Rest_Microservices - Fatal编程技术网

java.net.ConnectException:两个微服务之间通过docker的连接被拒绝

java.net.ConnectException:两个微服务之间通过docker的连接被拒绝,java,docker,api,rest,microservices,Java,Docker,Api,Rest,Microservices,我有两个微型服务。一个名为“配置服务”,另一个名为“发送方服务”。REST之后的第一个可以下载配置。在本地,使用(Intellij)环境,服务通信没有任何问题。当我尝试使用Docker通过rest从一个服务下载任何内容到另一个服务时,问题就出现了。 此外,在运行配置服务后,我可以在浏览器中轻松检索值数据 然而,当我运行下面的撰写时,我得到了一个类似于标题中的错误。 在其余的线程中,我只找到了来自“网络”的一个建议,但它不起作用 总之,只有使用docker时才会出现通信问题,这样就消除了代码的问题

我有两个微型服务。一个名为“配置服务”,另一个名为“发送方服务”。REST之后的第一个可以下载配置。在本地,使用(Intellij)环境,服务通信没有任何问题。当我尝试使用Docker通过rest从一个服务下载任何内容到另一个服务时,问题就出现了。 此外,在运行配置服务后,我可以在浏览器中轻松检索值数据

然而,当我运行下面的撰写时,我得到了一个类似于标题中的错误。 在其余的线程中,我只找到了来自“网络”的一个建议,但它不起作用

总之,只有使用docker时才会出现通信问题,这样就消除了代码的问题

第一个dockerfile:

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和主机之间的映射。