簡體   English   中英

如何使我的 docker 容器可以訪問我的數據庫?

[英]how to make my database accessible to my docker container?

我有一個基於 springboot 項目並使用以下命令生成的 docker 容器:

docker run --net=host -d --restart unless-stopped  -v /home/ramses/dockerTest:/uploads/deployment --name ramses-bl2 abyster01/ramses-bl2:528 

但容器無法訪問我的數據庫,正如您在此錯誤中看到的那樣:

Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection 
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

最后一個成功發送到服務器的數據包是 0 毫秒前。 驅動程序沒有收到來自服務器的任何數據包。

我的容器在主機 mod 中啟動,並且我驗證了 root(我在 springboot 項目屬性中設置的用戶)在我的數據庫中設置為用戶,如您在此屏幕截圖中所見:

在 localhost 中以 root 用戶身份

最后,我使用與我的屬性相同的憑據成功測試了與我的數據庫的連接。 但我不知道為什么我會收到這個錯誤。

對於您需要的內容,無需在主機模式下運行。 一般來說,您應該始終避免這樣做。

首先檢查本地網絡上主機的 IP 地址(不是本地接口 127.0.0.1,而是類似 192.168.XX 或類似的東西)。

通過連接到此 IP 和正確的端口,確保您可以從主機訪問您的數據庫。 還要檢查您使用的用戶是否也可以從 localhost 以外的主機連接。

然后使用附加標志運行容器: --add-host mydatabase:192.168.XX 容器內的應用程序應使用mydatabase作為數據庫服務器名稱。

我建議您使用docker-compose.yml文件。 將以下內容添加到文件中:

version: '3'
services:
  mysql-standalone:
    image: mysql:latest
    environment:
      - MYSQL_ROOT_PASSWORD=***
      - MYSQL_DATABASE=***
      - MYSQL_USER=***
      - MYSQL_PASSWORD=**

    volumes:
      - data:/var/lib/mysql

  spring-boot:
    image: *your-app-name-image*
    ports:
      [8080:8080]
    build:
      context: ./
      dockerfile: Dockerfile

    depends_on:
      - mysql-standalone

volumes:
  data:

然后在application.properties中有如下配置

 server.port=8080
 spring.datasource.url=jdbc:mysql://<container-name>:3306/<db-name>
 spring.datasource.username=***
 spring.datasource.password=***

最后,運行docker-compose up

請注意,docker 運行與 docker-compose 之間的區別之一是 docker-compose 從 Z9463F87BBED1FCDACFB8D40E18 讀取配置數據,而不是從 2 文件中設置您的配置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM