如何解決Docker連接本地MySQL服務(wù)失敗的問題
問題描述
在學(xué)習(xí) Docker 和 Go 時(shí),遇到了一個(gè)連接 MySQL 數(shù)據(jù)庫失敗的問題。
具體情況如下:
使用以下命令運(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ù)庫服務(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ù)。
解決方法
對于 Windows 和 Mac 用戶
在 Windows 和 Mac 上,可以使用 host.docker.internal 來代替 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)能得到解決。
對于 Linux 用戶
在 Linux 上,解決這個(gè)問題更加簡單,只需要在運(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ù)。
通過以上步驟,相信你已經(jīng)能夠成功解決 Docker 容器中無法連接本地 MySQL 數(shù)據(jù)庫的問題。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用 Docker 部署 GitLab 并持久化數(shù)據(jù)的實(shí)例步驟
本文將詳細(xì)介紹如何使用 Docker 部署 GitLab,并將數(shù)據(jù)(如倉庫、配置、日志等)持久化到主機(jī)磁盤,我們還將解決常見的端口沖突問題,并介紹如何從另一臺 GitLab 恢復(fù)數(shù)據(jù)到新的 GitLab 實(shí)例,感興趣的朋友一起看看吧2025-05-05
docker-compose啟動(dòng)mongo容器的使用
這篇文章主要介紹了docker-compose啟動(dòng)mongo容器的使用,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
使用Docker容器部署MongoDB并支持遠(yuǎn)程訪問及遇到的坑
MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的,今天通過本文給大家介紹使用Docker容器部署MongoDB并支持遠(yuǎn)程訪問及遇到的坑,感興趣的朋友一起看看吧2022-07-07
docker可視化管理工具portainer忘記密碼重置教程的實(shí)現(xiàn)
本文主要介紹了docker可視化管理工具portainer忘記密碼重置教程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
docker-compose統(tǒng)一管理多個(gè)容器使用詳解
這篇文章主要為大家介紹了docker-compose統(tǒng)一管理多個(gè)容器使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
docker容器增加或者修改容器映射端口的實(shí)現(xiàn)方法
在只有使用docker安裝的容器,沒有使用docker-compose或者其他客戶端工具,如果要增加或者修改容器端口,也是可以增加或者修改容器端口映射,本文給大家介紹了docker容器增加或者修改容器映射端口的實(shí)現(xiàn)方法,需要的朋友可以參考下2025-01-01

