![](/img/trans.png)
[英]how to make my mysql docker container accessible on another port apart 3306?
[英]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 項目屬性中設置的用戶)在我的數據庫中設置為用戶,如您在此屏幕截圖中所見:
最后,我使用與我的屬性相同的憑據成功測試了與我的數據庫的連接。 但我不知道為什么我會收到這個錯誤。
對於您需要的內容,無需在主機模式下運行。 一般來說,您應該始終避免這樣做。
首先檢查本地網絡上主機的 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.