我有两个微服务。一个名为";配置服务";另一个被命名为";发送者服务";。REST之后的第一个使下载配置成为可能。在本地,使用(Intellij(环境,服务可以毫无问题地进行通信。当我试图使用Docker通过rest将任何东西从一个服务下载到另一个服务时,问题就来了。此外,在运行配置服务后,我可以在浏览器中轻松检索值数据。
然而,当我运行下面的compose时,我会得到一个错误,就像标题中一样。在其余的线程中,我只找到了"network"的一个建议,但它不起作用。
总之,只有使用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组成:
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
提前感谢任何提示
我认为@OneCricketer已经发现了这个问题。
如果您运行两个容器(在Docker之外(,则需要将它们作为--net=host
或类似的容器运行,以便它们都绑定到主机端口,以便其中一个可以通过localhost:${PORT}
访问另一个。
如果在Docker Compose下运行容器,它们将不能作为localhost
访问,而是分别作为configuration-service
和sender-service
在8889
和8888
上访问(假设服务确实绑定到这些端口(。
注意Compose
ports
功能仅与绑定到主机网络的进程相关。由于ports
,您应该能够从主机确认对8888
和8889
上这些服务的访问,但这对于确保configuration-service
和sender-service
能够相互通信是不必要的。
可能您提供了这样的url来与侦听端口8889:的服务通信
localhost:8889/path
localhost在每个容器中的意思不同,请尝试以下内容:
configuration-service:8889/path