首先先安裝 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 模式,退出不會關閉 containerMYSQL_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>