我有一个带有gradle的基本spring boot应用程序,该应用程序可以调用Oracle数据库,并且数据库属性在application.properties文件中指定。
我使用插件“ com.google.cloud.tools.jib”并使用以下命令创建了Spring Boot应用程序的Docker映像:
./gradlew jibDockerBuild --image=app1
我有一个docker-compose文件,其中将映像指定为服务,并且我希望在运行命令“ docker-compose up”时启动应用程序
docker-compose文件如下:
version: '3'
services:
app1:
image: "app1"
ports:
- "8731:8731"
但是当我运行CMD中的“ docker-compose up”命令时,我收到以下异常:
java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
更多信息:
答案 0 :(得分:0)
您可以毫无问题地从IntelliJ连接,因为容器将端口(3769)暴露到主机(您的PC),但是现在您正尝试从一个Docker容器连接到另一个。
容器不共享网络(隔离),因此您需要连接它们。
推荐的方法之一是用户定义的网络
首先创建一个网络
docker network create --driver bridge my_network
运行应用程序
docker run -p 5432:5432 --network my_network -d --name=postgres postgres
docker run -p 5050:80 --network my_network -d --name=pgadmin dpage/pgadmin4
您可以使用以下方法验证它们是否在同一网络上有效运行
docker network inspect my_network
Spring Boot配置
您现在可以使用host.docker.internal
作为主机名从另一个连接到另一个,例如在您的Spring Boot应用程序中。
spring.datasource.url=jdbc:postgresql://host.docker.internal:5432/postgres