簡體   English   中英

無法從主機連接到在 Docker 中運行的 MySQL

[英]Cannot connect to MySQL running in Docker from host machine

我有多個 MySQL 服務器在單獨的 docker 容器中運行。 我無法從主機連接到任何一個。

$ mysql -h172.17.0.2 -uroot -pPASSWORD
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on '172.17.0.2' (60)

來自 docker 檢查的 IP 地址:

$ docker inspect local2 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

和端口暴露(但未映射):

$ docker inspect local2 | grep -B1 3306
            "ExposedPorts": {
                "3306/tcp": {},
                "33060/tcp": {}
--
            "Ports": {
                "3306/tcp": null,
                "33060/tcp": null

docker 容器是使用以下命令創建(並重新創建)的

docker run --name local -e MYSQL_ROOT_PASSWORD=PASSWORD -d mysql:8.0.21

我可以從網絡上的另一個 docker 客戶端連接:

docker run -it --network bridge --rm mysql mysql -h172.17.0.2 -uroot -pPASSWORD

此外,如果我猛擊容器,我可以在本地與 localhost 連接。

我只能從主機連接。

經過更多研究,我發現實際上不可能在不映射端口的情況下訪問 Mac 上的 Docker 實例。

https://github.com/docker/for-mac/issues/2670#issuecomment-371249949

您無法直接在 mac 上訪問容器 IP。 您需要使用 localhost 進行端口轉發

請參閱https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds

:(

我很樂意在這里出錯..

我無法發現您訪問容器中服務的方式有任何問題。 我只是懷疑該服務實際上還沒有准備好。

也許這會給你一個解決問題的想法:

passwd=pw
id=$(docker run --name some-mysql -e MYSQL_ROOT_PASSWORD="$passwd" --detach mysql)

ip=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$id")

printf "listing open ports on %s:\n You might have wait some seconds until they are open\n" "$ip"
nmap "$ip" -p 3306,33060

printf "connecting to %s:\n" "$ip"
mysql --host="$ip" --user="root" --password="$passwd" --protocol=TCP --wait

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM