【问题标题】:connect to mysql which is running in docker连接到在 docker 中运行的 mysql
【发布时间】:2018-06-26 07:58:15
【问题描述】:

创建 docker 网络后,我在 docker 容器中运行了我的 mysql。

docker network create --subnet=172.19.0.0/16 network-name

docker run -p 3306:3306 --net network-name --ip 172.19.0.13 -e MYSQL_ROOT_PASSWORD=password -d

然后当我尝试使用命令连接到本地的 mysql 时 mysql -uroot -p,我收到错误消息 (Error 2002 (HY000): Can't Connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2))

然后我用命令mysql -u root -p -h 172.19.0.13成功了

我以为我将本地主机端口 3306 与 docker 容器的 3306 端口连接起来。 为什么我无法通过 localhost 端口连接到 mysql?

【问题讨论】:

  • 如果你在没有--net标志的情况下运行会发生什么?
  • 你能发布docker psdocker port <mysql_container_id>的输出吗?
  • 因为你创建了私网!
  • 你真的需要在私有 docker 网络中运行吗?否则,请从您的命令中删除 --net

标签: mysql docker


【解决方案1】:

您可以使用 tcp 套接字或 unix 套接字连接到 mysql。 当您处于远程状态时,您总是使用 tcp socket 。 当您是本地 mysql 客户端时,更喜欢套接字。

在您的情况下,您需要知道 mysql 是 unix socket 的位置。 你可以使用:

 netstat -npl

当 mysql 在 docker 容器中运行时,您必须在容器内部才能在 localhost 上进行连接。

如果你是本地人:

  • mysql -u root -p -h 127.0.0.1 将强制使用 tcp 套接字
  • mysql -u root -p -h localhost 将使用 unix 套接字

【讨论】:

    猜你喜欢
    • 2021-02-15
    • 2019-08-28
    • 2016-02-22
    • 2019-12-25
    • 2014-10-23
    • 2018-05-20
    • 1970-01-01
    • 2016-02-21
    相关资源
    最近更新 更多