我在 docker compose 文件中定义了一个包含 n 个服务的堆栈:
version: "3.7"
services:
db:
...
backend:
image: $IMAGE_DEV_BACKEND
container_name: "backend"
hostname: backend
ports:
- "8888:8080"
depends_on:
- db
networks:
- backend
frontend:
image: $IMAGE_DEV_FRONTEND
container_name: "frontend"
hostname: frontend
depends_on:
- backend
networks:
- backend
- traefik_default
volumes:
data:
networks:
backend:
driver: bridge
external:
name: backend
traefik_default:
driver: bridge
external:
name: traefik_default
所有容器都在同一网络中。
在前端 Spring 应用程序中,我有以下 Spring 配置:
backend.url=http://backend:8888
当前端应用程序尝试连接到后端应用程序时,我得到 p>
ERROR DefaultFormCommandBean:529 - Error while performing action "datastoreAction": I/O error on POST request for "http://backend:8888/oauth/token": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://backend:8888/oauth/token": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:674)
当我将主机的 IP 地址与 docker 守护进程一起使用时,一切正常,容器可以相互通信。
我该怎么做才能使其与容器名称一起使用?
最佳答案
尝试使用backend.url=http://backend:8080
。端口 8888 用于从主机访问后端,而 8080 是实际容器的端口。查看更多信息here .
关于java - 无法在 docker 容器之间通信 - 连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60192821/