【问题标题】:PhpStorm - How to connect to MySQL via DockerPhpStorm - 如何通过 Docker 连接到 MySQL
【发布时间】:2019-03-06 16:20:06
【问题描述】:

我正在使用 PhpStorm 2018.3.4、Docker、MySQL 和 Ubuntu。 我尝试使用 Docker 容器 network_mysql 配置 MySQL 失败。

首先,我试过这个配置:

它给了我这个错误:

然后,我尝试了这个:

这个给了我另一个错误。

我错过了什么吗?还有其他地方我必须配置一些东西吗?

docker ps 输出:

这里docker network ls

对于命令docker inspect network_mysql,这里是描述的链接: https://pastebin.com/9LmeAkc8

这是一个 docker-compose.yml 配置: https://pastebin.com/DB4Eye4y

我尝试在wex_server_proxy 部分之外添加- "3306:3306",但无济于事。

要修改的文件是这个:

https://pastebin.com/TPBQNCDZ

我添加了ports 部分,打开了 3306 端口 :) 然后,它可以工作了。

【问题讨论】:

  • 在连接主机中使用你的 mysql 容器名称
  • 你可以通过这个命令docker ps或者docker container ls查看容器名
  • 错字mysql:///三个斜线,应该是2?
  • 你能分享你的容器配置吗?

标签: mysql docker phpstorm


【解决方案1】:

解决方案

我注意到您没有将 mysql 容器端口映射出来。如果你这样做了,你会从docker ps 命令看到这个:

...   0.0.0.0:3306->3306/tcp       network_mysql

容器network_mysql 连接到称为tmp_wex_net 的桥接类型网络。这意味着容器不能通过容器名称从主机访问。

我似乎正在为堆栈使用 docker-compose.yml 定义。为了能够从主机访问容器,您需要为此容器使用撰写定义的ports 部分:

serivces:
  mysql:
    ...
    ports:
      - "3306:3306"
    ...

如果您以docker run 开头,那么您可以使用:

docker run -p 3306:3306 --name network_mysql --network="tmp_wex_net" -d mysql

然后在 PHPStorm 的连接设置的主机名中使用 localhost。像这样:

主机:本地主机

端口:3306

数据库:网络


问题

您无法连接的原因是您在连接设置中指定的主机名network_mysql 无法解析到您的机器知道的任何主机。

docker容器的容器名,不是docker主机可以解析的DNS名。

如果你没有为你的 mysql 容器指定任何网络,那么它会连接到默认的桥接网络。如果您创建了一个新网络,但没有指定类型 - 它也将默认为网桥驱动程序。

为了从主机访问容器,您需要:

  1. 将容器连接到宿主网络
  2. 或从桥接网络上的容器,将端口映射到主机,如上述解决方案中建议的那样。然后,您可以使用来自主机的localhost:<portnum> 来寻址该容器上特定映射的端口。

【讨论】:

  • 我通过原始帖子中的链接添加了docker inspect network_mysql 命令。
  • 我可以看到您的容器位于“tmp_wex_net”网络中,该网络是一个桥接网络。请在我的答案底部尝试我的说明。我想我会把它们移到顶部。
  • 我编辑了我的答案以适应新信息,并使解决方案出现在答案的顶部。让我知道建议的解决方案是否适合您。
  • 我将与创建叠加层的人讨论您的解决方案。
  • 我对 Docker 配置文件进行了一些更改(我刚刚添加到我的帖子中),但它没有更改任何内容。
【解决方案2】:

对于在 docker 镜像中手动设置 mysql 的每个人:

您可能必须配置 mysql 以接受来自 docker 创建/用于与主机通信的网络接口的传入连接(以及端口转发)。

在我的情况下,我将以下内容添加到 /etc/mysql/my.cnf 到文件末尾:

[mysqld]
bind-address    = 0.0.0.0

mysql 监听所有网络接口。

【讨论】:

    【解决方案3】:

    我的解决方案: 我将端口从本地主机转发到远程:ssh -R 3306:localhost:3306 root@remote_host_ip 并且连接成功。

    【讨论】:

      猜你喜欢
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 2021-01-08
      • 2020-10-10
      相关资源
      最近更新 更多