問題描述
在使用Docker安裝WordPress時(shí),許多用戶會(huì)遇到一個(gè)常見問題:WordPress容器無法連接到MySQL/MariaDB數(shù)據(jù)庫。當(dāng)訪問WordPress站點(diǎn)時(shí),通常會(huì)看到”建立數(shù)據(jù)庫連接時(shí)出錯(cuò)”的錯(cuò)誤提示。
可能原因分析
- 數(shù)據(jù)庫容器未正確啟動(dòng):MySQL/MariaDB容器可能沒有正常運(yùn)行
- 網(wǎng)絡(luò)配置問題:WordPress和數(shù)據(jù)庫容器不在同一Docker網(wǎng)絡(luò)中
- 連接參數(shù)錯(cuò)誤:wp-config.php中的數(shù)據(jù)庫配置不正確
- 權(quán)限問題:數(shù)據(jù)庫用戶沒有足夠的權(quán)限
- 端口沖突:3306端口可能被其他服務(wù)占用
詳細(xì)解決方案
1. 檢查容器狀態(tài)
首先確認(rèn)所有容器都已啟動(dòng)并運(yùn)行正常:
docker ps -a
確保MySQL和WordPress容器的STATUS列都顯示為”Up”。
2. 創(chuàng)建自定義Docker網(wǎng)絡(luò)
推薦為WordPress和數(shù)據(jù)庫創(chuàng)建一個(gè)專用網(wǎng)絡(luò):
docker network create wordpress_network
然后運(yùn)行MySQL容器時(shí)加入該網(wǎng)絡(luò):
docker run --name mysql_db --network wordpress_network -e MYSQL_ROOT_PASSWORD=yourpassword -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -d mysql:5.7
運(yùn)行WordPress容器時(shí)也加入同一網(wǎng)絡(luò):
docker run --name wordpress --network wordpress_network -e WORDPRESS_DB_HOST=mysql_db -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress -e WORDPRESS_DB_NAME=wordpress -p 8080:80 -d wordpress
3. 驗(yàn)證數(shù)據(jù)庫連接
進(jìn)入WordPress容器測試數(shù)據(jù)庫連接:
docker exec -it wordpress bash
apt-get update && apt-get install -y mysql-client
mysql -h mysql_db -u wordpress -p
輸入密碼后應(yīng)能成功連接數(shù)據(jù)庫。
4. 檢查wp-config.php配置
如果使用已有WordPress安裝,確保wp-config.php中包含正確的數(shù)據(jù)庫信息:
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', 'wordpress');
define('DB_HOST', 'mysql_db');
5. 防火墻和端口檢查
確保沒有防火墻阻止容器間的通信:
sudo ufw status
如果啟用,添加規(guī)則允許Docker通信:
sudo ufw allow from 172.16.0.0/12
常見錯(cuò)誤排查
- Error establishing a database connection
- 檢查數(shù)據(jù)庫容器是否運(yùn)行
- 驗(yàn)證數(shù)據(jù)庫用戶名和密碼
- Unknown MySQL server host ‘mysql’
- 確認(rèn)使用了正確的容器名稱作為主機(jī)名
- 確認(rèn)兩個(gè)容器在同一網(wǎng)絡(luò)
- Access denied for user
- 重新創(chuàng)建數(shù)據(jù)庫用戶并授予權(quán)限
- 檢查密碼是否匹配
最佳實(shí)踐建議
- 使用Docker Compose簡化管理
- 為生產(chǎn)環(huán)境設(shè)置數(shù)據(jù)庫持久化存儲(chǔ)
- 定期備份數(shù)據(jù)庫
- 使用最新穩(wěn)定版的鏡像
- 為不同項(xiàng)目創(chuàng)建獨(dú)立的Docker網(wǎng)絡(luò)
通過以上步驟,應(yīng)該能夠解決Docker中WordPress連接數(shù)據(jù)庫的問題。如果問題仍然存在,可以查看容器日志獲取更多信息:
docker logs mysql_db
docker logs wordpress