iT邦幫忙

0

<Docker> MySQL Container建置成功卻無法連線

  • 分享至 

  • xImage

各位版上大大好,
小弟我今天在建置MySQL的時候發現一直都沒有辦法成功連線進去服務進行後續設定,
docker run的code

docker run --name ANC_MySQL --restart=always \
> -e TZ=Asia/Taipei \
> -e MYSQL_ROOT_PASSWORD=123456 \
> -e MYSQL_DATABASE=ANC_DATABASE \
> -p 3306:3306 \
> -d mysql

container 建置過程

Unable to find image 'mysql:latest' locally
latest: Pulling from library/mysql
39fbafb6c7ef: Pull complete
76e9f8ca4fd7: Pull complete
3898be77c395: Pull complete
992f720677b1: Pull complete
9b298d35e4a8: Pull complete 
c7a7ae1e6628: Pull complete 
9501ab7b6608: Pull complete
69d00a593dfe: Pull complete
d5a5c1244ef5: Pull complete
ec08e11879d6: Pull complete
f8dbf0a1ea0e: Pull complete
Digest: sha256:03b0af22f4df273a2b7bb6320ca305f9e0dcaebe411a1ec75e6adc9fea051aa2
Status: Downloaded newer image for mysql:latest
ca5f9ffa6149ea24329ac60c03ea623ff5e2546db65ecdf9cda4742cfebfc8b0
sh-4.4# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                               NAMES
ca5f9ffa6149   mysql     "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, 33060/tcp   ANC_MySQL
sh-4.4# docker exec -it ANC_MySQL bash

以下是小弟從網上及版上找尋一些資料,嘗試利用無密碼的方式進去服務進行設定,
但是會一直出現ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

bash-4.4# mysql -u root -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
bash-4.4# mysql -uroot    
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
bash-4.4# mysql -uroot -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
bash-4.4# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
bash-4.4#

懇請版上各位大神救救小弟...
以往直接使用docker run建置完成就可以直接使用,
今天不知道為何卻會出現這樣的錯誤訊息QAQ

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
Ray
iT邦大神 1 級 ‧ 2023-02-07 11:34:51
最佳解答
....to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

你有沒有發現最後那個字?

你用 mysql 連上的是通訊管道是: local unix socket, 不是 TCP port 3306.

mysql 在本機預設會用 unix socket 去連 server, 若要強制改用 TCP port, 請用 -h 指定主機名稱或是 IP:

mysql -h 127.0.0.1 -u root -p
看更多先前的回應...收起先前的回應...
kennex_x iT邦新手 4 級 ‧ 2023-02-07 11:42:28 檢舉

大師午安,
我剛剛嘗試以後仍然是有著相同得錯誤訊息唷,
此外我也有嘗試使用過mysql -h 0.0.0.0 -u root -p
亦是一樣的結果...
感謝您的回答。

Ray iT邦大神 1 級 ‧ 2023-02-07 11:46:03 檢舉

你先在外面用 netstat -nat 查一下, 到底 port 3306 有沒有被建立起來?
(如果有的話, 她是被 Binding 在哪一個 IP 上?)

如果連 port 都沒建立, 代表你的 mysql server 沒有正常啟動.
有 Binding IP 的話, 請直接指定連那個 IP 看看
(有 0.0.0.0 的話, 請用 127.0.0.1 去連她)

kennex_x iT邦新手 4 級 ‧ 2023-02-07 13:42:37 檢舉

大師午安,
剛剛使用nestat-nat確定是有被建立起來的;
方才午休回來以後再測試一次,竟然就成功進入mysql服務...
我猜想是否有種可能是container建置完成與服務架設完成式兩件事情呢?
還是很感謝大師幫忙 =)

DennisLu iT邦研究生 1 級 ‧ 2023-02-07 15:00:16 檢舉

container初次啟動後,有些服務應用屬性是會"初始化"。
初始化過程,服務還沒好,你就急著連入還沒完成的服務,
就會有類似的狀況。
如果是人工操作,建議在開起之後,看log追蹤是不是Ready了。
docker logs ANC_MySQL -f

不過乾淨的mysql初始化理論上不會太久,至少不會久到你上ithome來發求救文打好都還沒完成,你的系統或硬體是不是哪裡不健康了?

我要發表回答

立即登入回答