我有一个带有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
更多信息:
最佳答案
您可以毫无问题地从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 application.properties中spring.datasource.url=jdbc:postgresql://host.docker.internal:5432/postgres
关于spring-boot - Dockerized Spring Boot应用程序连接到数据库Docker镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60003840/