PhpStorm-如何通过Docker连接到MySQL

时间:2019-03-06 16:20:06

标签: mysql docker phpstorm

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

首先,我尝试了这种配置:

First configuration

它给了我这个错误:

Result of the first configuration

然后,我尝试了这个:

Second configuration

这个给了我另一个错误。

Result of the second configuration

我想念什么吗?在另一个地方我必须配置一些东西吗?

docker ps输出:

docker ps

这里docker network ls

docker network ls

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

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

除了- "3306:3306"部分外,我试图将wex_server_proxy放在无效的地方。

要修改的文件就是这个文件:

https://pastebin.com/TPBQNCDZ

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

3 个答案:

答案 0 :(得分:2)

解决方案

我注意到您没有将mysql容器端口映射出来。如果这样做,您将从docker ps命令中看到以下内容:

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

Post not mapped out for mysql container

容器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>来寻址该容器上专门映射的端口。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

就我而言,我将以下内容添加到文件末尾的 /etc/mysql/my.cnf 中:

[mysqld]
bind-address    = 0.0.0.0

使用该 mysql 侦听所有网络接口。