Dockerized Spring Boot应用程序无法连接到数据库容器

时间:2020-02-04 05:53:25

标签: spring-boot docker docker-compose docker-networking

我有一个带有gradle和Hibernate的基本Spring Boot应用程序,可以调用Oracle数据库,该数据库位于docker容器中。

我使用插件“ com.google.cloud.tools.jib”并使用以下命令创建了Spring Boot应用程序的Docker映像:

./gradlew jibDockerBuild --image=app1

我已经创建了一个用户定义的网络(我们称之为 my_network ),并且已经将数据库容器附加到上述网络中。

我有一个docker-file,即使我将映像指定为服务并在运行时使用 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

尝试过的解决方案,但没有结果:

  1. 将指定的数据库作为服务,因此基本上让它在我第一次按下“ docker-compose up”时创建,并且在服务app1中指定了标签depends_on,但是创建的数据库容器将处于运行状况:app1拥有后很长的启动状态被启动并崩溃了
  2. 让网络从docker-compose文件中创建,但行为与所询问的问题相同
  3. 在数据库URL中用 host.docker.internal 替换了localhost,但是它说是未知主机

1 个答案:

答案 0 :(得分:0)

在Docker-compose文件内部。创建Oracle数据库容器,然后创建您的API容器,如下所示:

version: '3.7'
services:
  oracle-database:
      image: Your oracleImage
      environment:
         //define your oracle db settings..eg default password,users etc
      volumes:
            - /data/oracle
      ports:
        - 127.0.0.1: 32769:32769/tcp

  api1:
    image: api1
    ports:
      - 127.0.0.1:9090:9090/tcp
    depends_on:
     - oracle-database
    environment:
       - DATABASE_HOST=oracle-database
       - DATABASE_USER= username
       - DATABASE_PASSWORD=password
       - DATABASE_NAME= NameOfYourDatabase
       - DATABASE_PORT= 32769