【发布时间】:2020-02-04 16:23:44
【问题描述】:
我有一个带有 gradle 和 Hibernate 的基本 Spring Boot 应用程序,它调用 Oracle 数据库,数据库位于 docker 容器中。
我使用插件“com.google.cloud.tools.jib”并使用以下命令创建了 Spring Boot 应用程序的 Docker 映像:
./gradlew jibDockerBuild --image=app1
我已经创建了一个用户定义的网络(我们称之为 my_network)并且我已经将数据库容器附加到上述网络。
我有一个 docker 文件,即使我将图像指定为服务并在运行时使用 my_network 我在 CMD 中点击“docker-compose up”命令,我收到以下异常:
java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
docker-compose 文件如下:
version: '3.7'
networks:
my_network:
external:
name: my_network
services:
app1:
image: "app1"
ports:
- "9090:9090"
environment:
SPRING_DATASOURCE_URL: "jdbc:oracle:thin:@localhost:32769/ORCLPDB1.localdomain"
SPRING_DATASOURCE_USERNAME: username
SPRING_DATASOURCE_PASSWORD: password
networks:
- my_network
尝试了解决方案但没有结果:
- 将数据库指定为服务,所以基本上让它在我第一次点击“docker-compose up”时创建,并在服务 app1 中指定标签depends_on,但创建的数据库容器将处于健康状态:在 app1 拥有很久之后的启动状态已启动并崩溃
- 让网络从 docker-compose 文件内部创建,但行为与问题中的相同
- 在数据库 url 中将 localhost 替换为 host.docker.internal 但它说是未知主机
【问题讨论】:
-
那么 DB 容器是否能够正常启动?
-
@daniu 当我没有在 docker-compose 文件中将数据库指定为服务时,是的,它可以正常启动
-
将
@localhost:32769替换为您的Oracle Database container名称以及port number。 -
@malverndongeni 所以基本上:jdbc:oracle:thin:@ORA12201_1/ORCLPDB1.localdomain ? (ORA12201_1) 是容器名称吗?如果我理解正确的话,它会给我一个例外,说这不是一个有效的数据库 url
-
试试这个
environment: - DATABASE_HOST=ORA12201_1 - DATABASE_USER= username - DATABASE_PASSWORD= password - DATABASE_NAME= NameOfYourDatabase - DATABASE_PORT= 32769
标签: spring-boot docker docker-compose docker-networking