我坚持无法在浏览器的localhost:8091
上打开我的REST Spring Boot应用的问题。
这是我的docker-compose.xml
(一切都本地部署在Docker Desktop上):
version: '3.3'
services:
postgres:
build:
context: services/postgres
dockerfile: Dockerfile.development
command: postgres
ports:
- "5432:5432"
environment:
- POSTGRESS_USER=postgres
- POSTGRESS_DB=postgres
- POSTGRESS_PASSWORD=qqq
- POSTGRES_HOST_AUTH_METHOD=trust
volumes:
- "db-data:/var/lib/postgresql/data"
app:
build:
context: services/app
dockerfile: Dockerfile.development
command: java -jar ./app.jar
environment:
- PORT=8091
network_mode: host
image: 'my-java-app'
ports:
- 8091:8091
depends_on:
- postgres
angular:
build:
context: services/angularfrontend
dockerfile: Dockerfile.development
image: 'my-angular-app'
ports:
- 80:80
volumes:
db-data:
Spring Boot App通常在8091
上启动并连接到数据库,但是随后我无法从本地计算机对其API进行调用(“连接被拒绝”)。
Angular应用正常打开(在localhost:80
上),但无法调用localhost:8091
Spring Boot应用。
答案 0 :(得分:1)
从角度服务容器到localhost:8091的调用失败,对吗? 尝试在有角度的前端容器中覆盖对后端的调用 使用 app:8091 (这是调用后端服务的方式)而不是localhost:8091。 在“角度”容器中,本地主机不会转换为“应用”容器。
您不能使用localhost从一个容器进入另一个容器。 容器内的本地主机将转换为该容器的ip。
尝试在您的角度应用程序中调用可配置的后端,然后在使用环境的docker-compose中覆盖该配置。 还要对springboot应用程序应用程序执行此操作。 我看不到在环境中您覆盖对postgress的调用。 在删除network_mode:host
之后,在application.properties中公开该配置并在docker-compose中覆盖。答案 1 :(得分:0)
如果您确实要使用network_mode: host
,则无需指定<source>:<dest>
,因为该应用程序直接在主机网络上监听8091:
...
app:
build:
context: services/app
dockerfile: Dockerfile.development
command: java -jar ./app.jar
environment:
- PORT=8091
network_mode: host
image: 'my-java-app'
depends_on:
- postgres
...
如果您要像其他容器一样运行Java应用程序,只需从构成文件中删除这一行,网络模式将默认为桥接:
network_mode: host