Hazel Wu | 22'mm

用Docker安裝 mysql 與 phpmyadmin

2020-05-16

電腦若沒有phpmyadmin、mysql的image檔,會自動幫你拉下來。

首先先來安裝mysql

MySQL

1
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 127.0.0.1:3306:3306 -d mysql
  • –name設定container名稱,這裡設定mysql
  • -e 設定環境變數,曝露出來的變數是MYSQL_ROOT_PASSWORD,將帳號root的密碼也設定root
  • -p 將外部的3306 Port與內部容器3306對照
  • -d 在背景下跑
  • 用mysql image來啟動此容器

跑成功後我們可以確認容器mysql是否有正常啟動

1
docker ps

再進入mysql container內,測試看看可否正常使用MySQL資料庫

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

phpMyAdmin

接著再來安裝phpMyAdmin的container。

1
docker run --name phpMyAdmin -d --link mysql:db -p 9100:80 phpmyadmin/phpmyadmin

  • –name設定container名稱,這裡設定phpMyAdmin
  • -d 在背景下跑
  • –link,透過link與mysql資料庫連接
  • -p 將外部9100 Port與內部80 Port對照
  • 用 phpmyadmin/phpmyadmin image來啟動此容器

完成後在網址上輸入localhost:9100就會看到phpMyAdmin登入介面了

遇到的問題

  1. laravel無法連接資料庫
    由於安裝mysql, phpMyAdmin是為了建Laravel,在laravel專案中無法與資料庫連接,
    錯誤訊息:
    1
    The server requested authentication method unknown to the client

爬了文才知道是因為MySQL 8使用新的密碼驗證方式:caching_sha2_password,有兩種解決辦法

  1. 升級php、載入模組
  2. 修改使用者的密碼驗證方式

我是用第二種方式,修改使用者密碼驗證方式來解決
進入mysql container

1
2
3
docker exec -it mysql bash
mysql -u root -p
ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD'

完成後錯誤訊息就不再跳出,而root密碼也被改為PASSWORD,在.env要記得改成PASSWORD

  1. 換了個錯誤訊息
    1
    SQLSTATE[HY000] [1045] Access denied for user 'root'@'172.17.0.1' (using password: YES) (SQL: select * from information_schema.tables where table_schema = works and table_name = migrations and table_type = 'BASE TABLE')

Reference

Tags: docker