[英]jdbc url for mysql from docker to localhost does not work without host mode
我有一個連接到本地MySQL的本地spring boot應用程序,它工作正常。
對於連接,我使用以下屬性:
spring.datasource.url=jdbc:mysql://localhost:3306/pitstop?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
我想將我的應用程序放在docker中並嘗試連接到本地數據庫。
所以我需要修改MySQL url
。
我使用此命令獲取本地IP ip route show | grep "default" | awk '{print $3}'
ip route show | grep "default" | awk '{print $3}'
ip route show | grep "default" | awk '{print $3}'
結果為192.168.1.1
。 我這樣修改我的網址
spring.datasource.url=jdbc:mysql://192.168.1.1:3306/pitstop?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
然后嘗試通過命令docker run -p 9001:9001 --network=bizon4ik --rm bizon4ik/mycontainer
用我的應用程序啟動docker run -p 9001:9001 --network=bizon4ik --rm bizon4ik/mycontainer
,結果是例外:
Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
我試圖找到另一個IP。 我使用ip addr show
命令並找到下一條記錄:
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 30:52:cb:db:8d:e0 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.102/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp3s0
因此,基於此,我使用了192.168.1.102
並修改了我的網址,但結果是相同的異常。
為了確保已建立的IP是正確的,我使用純ubuntu docker run -it --rm --network=bizon4ik ubuntu
運行了一個新容器並檢查了上述IP:
root@268c4d544328:/# nmap -p 3306 192.168.1.1
Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-28 17:28 UTC
Nmap scan report for 192.168.1.1
Host is up (0.053s latency).
PORT STATE SERVICE
3306/tcp filtered mysql
root@268c4d544328:/# nmap -p 3306 192.168.1.102
Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-28 15:56 UTC
Nmap scan report for my-host (192.168.1.102)
Host is up (0.000088s latency).
PORT STATE SERVICE
3306/tcp closed mysql
這樣看起來很好,ubuntu容器可以ping我的數據庫。 您對我為什么無法通過應用程序連接到數據庫有任何想法?
注意:
我檢查了DB SHOW GRANTS;
結果是將GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION
我還檢查了/etc/mysql/my.cnf
文件。 它只有以下記錄:
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
我沒有~/.my.cnf
問題出在MySQL的bind-address
中。 我在/etc/mysql/my.cnf
查看了它,但是正確的位置是/etc/mysql/mysql.conf.d/mysqld.cnf
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.