最近我們在使用 Docker 部署 MySQL 數(shù)據(jù)庫時,出現(xiàn)了一些問題:我們可以通過 MySQL 命令行客戶端登錄 MySQL 實例,但是我們的應(yīng)用程序在嘗試連接數(shù)據(jù)庫時卻不能成功。于是,我們花了些時間排查并解決了這個問題。
在 Docker 中,我們可以通過以下方式啟動 MySQL:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
在啟動容器時,我們指定了 MySQL 的密碼,并使用 -d 選項將容器以 daemon 后臺形式運行。我們還可以通過下面的命令查看容器是否啟動:
docker ps
接下來,我們可以從 Docker 容器外部進行連接。我們可以使用 MySQL 命令行客戶端登錄 MySQL 數(shù)據(jù)庫實例,例如:
mysql -h127.0.0.1 -uroot -p
在此處,我們使用了 -h 選項指定 MySQL 數(shù)據(jù)庫的 IP 地址,-u 選項指定用戶名,-p 選項指定密碼。在登錄成功后,我們可以執(zhí)行 SQL 命令。
但是,問題在于我們的應(yīng)用程序不能夠成功連接到數(shù)據(jù)庫。
我們首先查看了應(yīng)用程序的配置文件,并發(fā)現(xiàn)其中的數(shù)據(jù)庫連接參數(shù)存在問題。接著,我們檢查了容器中的 MySQL 配置文件 my.cnf,并發(fā)現(xiàn)默認(rèn)情況下綁定到 127.0.0.1,并不能監(jiān)聽來自容器外部的連接。為了解決這個問題,我們需要編輯 my.cnf 文件,將綁定地址修改為通配地址 0.0.0.0,例如:
bind-address = 0.0.0.0
經(jīng)過上述修改后,在重啟容器后,我們的應(yīng)用程序終于能夠成功連接到 MySQL 數(shù)據(jù)庫了。
總結(jié)一下,當(dāng)我們在 Docker 中啟動 MySQL 數(shù)據(jù)庫時,需要注意 MySQL 的綁定地址,默認(rèn)情況下可能無法監(jiān)聽來自容器外部的連接。如果我們遇到了連接不上的問題,可以檢查 MySQL 配置文件中的綁定地址是否正確,并將其修改為 0.0.0.0。