安裝:php
請看連接:https://www.cnblogs.com/jingxiaoniu/p/12557663.htmlhtml
問題:mysql
php代碼測試鏈接mysql報錯,鏈接失敗sql
$servername = "mysql"; $username = "root"; $password = "root"; // 建立鏈接 $conn = new mysqli($servername, $username, $password); // 檢測鏈接 if ($conn->connect_error) { die("鏈接失敗: " . $conn->connect_error); } echo "鏈接成功";
一 沒有mysqli擴展支持docker
php連接mysql須要mysqli擴展的支持,docker安裝mysql默認沒有mysqli擴展,須要下載。安全
1 進入docker的mysql容器內部bash
docker exec -it [容器ID] bash測試
2 進入docker-php-ext-install目錄spa
cd /usr/local/bindebug
3 下載mysqli擴展
./docker-php-ext-install mysqli
4 查看擴展目錄
cd /usr/local/lib/php/extension/no-debug-non-zts-[時間版本]
5 查看是否成功
是否有mysqli.so文件,若是有就表示下載成功
6 修改php配置文件,添加mysqli.so擴展
extension=mysqli.so
7 重啓php容器
docker restart [容器名稱|ID]
二 mysql連接主機問題
php要連接docker中運行的mysql是不能用localhost或127.0.0.1來連接的,由於每一個docker運行容器的localhost 127.0.0.1都是本身容器自己,不是mysql容器,須要修改爲mysql容器內部IP或者是mysql容器名稱
1 獲取容器內部IP地址
docker inspect [容器名稱|ID] |grep IPAddress
docker inspect --format='{{.NetworkSettings.IPAddress}}' [容器名稱|ID]
2 修改鏈接主機IP (如:)
$servername = 'mysql'
$servername = '172.27.0.5'
三 mysql8版本問題
mysql8.0使用新的安全驗證方式caching_sha_password,默認是mysql_native_password
解決方法:
1 查看用戶plugin方式,若是爲 caching_sha_password 修改
select * from user\G;
2 設置用戶不過時可跳過
ALTER USER 'root'@'%' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;
3 修改身份驗證類型
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'
4 刷新權限生效
FLUSH PRIVILEGES;
四 navicat鏈接mysql失敗
主機名或ip地址不能使用127.0.0.1 或 localhost連接,使用本機IP
1 查看本機IP地址
ifconfig
以上就是此次的所有內容!