Docker 安裝 MySQL、phpMyAdmin


首先先安裝 docker desktop for mac。安裝完畢後把 MySQL 和 phpmyadmin 的 image 拉下來。

docker pull mysql
docker pull phpmyadmin/phpmyadmin

MySQL

接下來就可以 run 一個 container:

docker run --name <Container Name> -e MYSQL_ROOT_PASSWORD=<PASSWORD> -p 127.0.0.1:3306:3306 -d mysql

參數說明:

  • --name 指定 container 名稱
  • -p 將外部的 3306 port 與內部的對照起來
  • -d detached 模式,退出不會關閉 container
  • MYSQL_ROOT_PASSWORD 設定 MySQL root 密碼

之後進入 container 測試看看是否可以使用 MySQL 資料庫:

docker exec -it mysql bash
mysql -u root -p

如果 Sequal Pro 等軟體無法登入,請繼續看下方說明。


phpMyAdmin

接下來建立 phpMyAdmin 的 container:

docker run --name myadmin -d --link mysql:db -p 9100:80 phpmyadmin/phpmyadmin
  • 透過 --link 與資料庫連接
  • -p 一樣將內外部 port 對照起來

完成後在網址列輸入 http://localhost:9100 就可以看到登入介面囉。但此時登入會有錯誤訊息:

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

這是因為 MySQL 8 使用了新的密碼驗證方式:caching_sha2_password,可以藉由升級 PHP 版本和載入模組來支援;或是修改使用者的密碼驗證方式來解決。

進到 MySQL 並使用以下指令:

ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD'

完成後就可以正常登入了。


查看現有的 container 和 images

docker ps -a
docker images -a

疑難雜症

一開始裝完兩個 container 後,發現登入不了,遇到以下錯誤訊息:

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name does not resolve

推測可能是 link 出了什麼問題,有查到相關文章說建立 container 時加入 -e PMA_HOST="mysql",但測試後無法仍排解,最後是使用上面的指令重新跑一個才成功。


另一個問題是 Sequel Pro (v1.1.2) 連到本地 DB 抓不到資料庫清單,而且一關閉就 Crash,推測是應用程式的問題,在 MacOS Mojave 10.14.2 連接 MySQL 8.0 會出錯,到官網下載 Test Build 版本可以解決此問題。缺點是鬆餅沒有蜂蜜了 (?)。

Docker 常用指令

docker ps -a // 列出所有 container
docker start <container-name>

參考資料


發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *