如何解決Docker連接本地MySQL服務(wù)失敗的問題
問題描述
在學(xué)習(xí) Docker 和 Go 時(shí),遇到了一個(gè)連接 MySQL 數(shù)據(jù)庫(kù)失敗的問題。
具體情況如下:
使用以下命令運(yùn)行 Docker 容器:
docker run --rm -p 8080:8080/tcp --env-file .env my-project:latest
.env
文件中的內(nèi)容如下:
DB_HOST=127.0.0.1 DB_USERNAME=root DB_NAME=mydbs DB_PASS=root123 AUTH_GEN_URL=https://api.learning.mydbs.id
在 Windows 上使用 Docker Desktop,報(bào)錯(cuò)信息為:dial tcp 127.0.0.1:3306: connect: connection refused
。
這意味著在 IP 127.0.0.1
和端口 3306
上沒有數(shù)據(jù)庫(kù)服務(wù)在監(jiān)聽。
問題分析
在默認(rèn)的網(wǎng)絡(luò)模式下,127.0.0.1
指的是容器內(nèi)部的地址,而不是主機(jī)的地址。
因此,當(dāng)容器嘗試連接 127.0.0.1:3306
時(shí),它實(shí)際上是在連接容器自身的 3306
端口,而不是主機(jī)上的 MySQL 服務(wù)。
解決方法
對(duì)于 Windows 和 Mac 用戶
在 Windows 和 Mac 上,可以使用 host.docker.internal
來(lái)代替 127.0.0.1
。
這樣可以確保容器內(nèi)部的服務(wù)正確連接到運(yùn)行在主機(jī)上的 MySQL 實(shí)例。
修改后的 .env
文件如下:
DB_HOST=host.docker.internal DB_USERNAME=root DB_NAME=mydbs DB_PASS=root123 AUTH_GEN_URL=https://api.learning.mydbs.id
這樣修改后,再次運(yùn)行 Docker 容器,問題應(yīng)能得到解決。
對(duì)于 Linux 用戶
在 Linux 上,解決這個(gè)問題更加簡(jiǎn)單,只需要在運(yùn)行 Docker 容器時(shí)添加 --network="host"
參數(shù)即可。
這樣,容器將直接使用主機(jī)的網(wǎng)絡(luò),127.0.0.1
將指向主機(jī)自身。
命令如下:
docker run --rm --network="host" --env-file .env my-project:latest
總結(jié)
以上是解決 Docker 連接本地 MySQL 服務(wù)失敗問題的詳細(xì)步驟。在不同操作系統(tǒng)上,解決方法有所不同:
- Windows 和 Mac 用戶可以使用
host.docker.internal
。 - Linux 用戶可以使用
--network="host"
參數(shù)。
通過(guò)以上步驟,相信你已經(jīng)能夠成功解決 Docker 容器中無(wú)法連接本地 MySQL 數(shù)據(jù)庫(kù)的問題。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
以示例講解Clickhouse Docker集群部署以及配置
這篇文章主要介紹了Clickhouse Docker集群部署及配置,示例講解的非常詳細(xì),希望可以幫助到有需要的小伙伴2021-08-08使用Docker安裝和配置 MySQL 數(shù)據(jù)庫(kù)的過(guò)程詳解
本文將介紹如何使用Docker來(lái)安裝和配置MySQL數(shù)據(jù)庫(kù),以便在開發(fā)和測(cè)試環(huán)境中快速搭建MySQL實(shí)例,本文也是介紹兩種方式進(jìn)行分別是“使用鏡像安裝”、“使用Docker Compose安裝”,感興趣的朋友一起看看吧2023-12-12基于Docker部署Dubbo+Nacos服務(wù)的過(guò)程
這篇文章主要介紹了基于Docker部署Dubbo+Nacos服務(wù),本文介紹基于?Docker?部署一套?Dubbo?+?Nacos?的微服務(wù)環(huán)境,并解決容器里的?IP?及端口的訪問問題,需要的朋友可以參考下2023-02-02基于Docker+Jenkins實(shí)現(xiàn)自動(dòng)化部署的方法
這篇文章主要介紹了基于Docker+Jenkins實(shí)現(xiàn)自動(dòng)化部署,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07docker部署RustDesk自建服務(wù)器的小結(jié)
本文詳細(xì)介紹了如何使用Docker部署RustDesk自建服務(wù)器,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-12-12Docker 搭建私有倉(cāng)庫(kù)(registry、harbor)
這篇文章主要介紹了Docker 搭建私有倉(cāng)庫(kù)(registry、harbor),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Docker基礎(chǔ)教程之Dockerfile語(yǔ)法詳解
這篇文章主要給大家介紹了關(guān)于Docker基礎(chǔ)教程之Dockerfile語(yǔ)法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Docker具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07