问题是这样的:我正在使用 Spring Boot 制作一个项目,在我的项目中,有两个模块必须彼此分开运行,并通过 HTTP 协议相互通信。这些模块已经编写好并准备就绪,现在我试图在 Docker 容器中运行它,一切都开始了——我可以完全使用该服务,但是当我尝试使用向第二个模块发送 HTTP 请求的函数时(通过RestTemplate),原来彼此的模块都看不到。当我在没有 Docker 的情况下开发应用程序时,地址是:
- 端口 8080 上的主模块
http://localhost:8080 - 第二个模块在8081端口,我在该地址访问,在body中传递了一些值
http://localhost:8081/compile
现在我已经通过 Docker Compose 链接在 Docker 中运行了这些模块,访问此地址时出现错误,这是我的 docker-compose.yml:
version: '3.7'
services:
app:
container_name: dexterity
build: .
ports:
- 8080:8080
command: java -jar --spring.profiles.active=dev dexterity.jar
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/dexterity
SPRING_DATASOURCE_USERNAME: postgres
SPRING_DATASOURCE_PASSWORD: 1234
depends_on:
- db
- compileta
networks:
- compileta
compileta:
container_name: compileta
image: compileta
ports:
- 8081:8081
networks:
- compileta
db:
container_name: postgres
image: postgres:latest
ports:
- 5432:5432
volumes:
- ./pg_data:/var/lib/postgresql/data/pgdata
environment:
POSTGRES_USERNAME: postgres
POSTGRES_PASSWORD: 1234
POSTGRES_DB: dexterity
restart: always
networks:
- compileta
networks:
compileta:
driver: bridge
如何在 Docker 中正确设置这样的网络?我花了很多时间搜索,但无法弄清楚。
如果您需要更多详细信息,请询问。我会尽快回复,我真的需要帮助
PS app模块是主模块,compileta模块是第二个,也就是app关联的那个
在本地运行时,compileta 服务在 localhost 主机名下可用。在 docker-compose 中,它将按名称提供
compileta(即与 docker-compose 服务的名称相同)。也就是说,您需要向主应用程序添加(如果还没有)一个参数,该参数将指示要连接到的地址
compileta。然后你需要
app在 docker-compose 的服务配置中进行设置。最重要的是,通过一个环境变量,类似于如何设置数据库地址。如果调用参数compileta.url,则配置如下:在引用 compileta 的类的主要服务中,应该有如下内容: