PhpStorm-如何通过Docker连接到MySQL

lio*_*elp 3 mysql phpstorm docker

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

首先,我尝试了以下配置:

第一种配置

它给了我这个错误:

第一次配置的结果

然后,我尝试了这个:

第二配置

这个给了我另一个错误。

第二种配置的结果

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

docker ps 输出:

码头工人ps

在这里docker network ls

码头工人网络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端口:)然后,它起作用了。

And*_*zen 6

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

...   0.0.0.0:3306->3306/tcp       network_mysql
Run Code Online (Sandbox Code Playgroud)

帖子未映射出mysql容器

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

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

serivces:
  mysql:
    ...
    ports:
      - "3306:3306"
    ...
Run Code Online (Sandbox Code Playgroud)

如果您以开头docker run,则可以使用以下命令完成相同的操作:

...   0.0.0.0:3306->3306/tcp       network_mysql
Run Code Online (Sandbox Code Playgroud)

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

主机:本地主机

港口:3306

数据库:网络


问题

无法连接的原因是,network_mysql在连接设置中指定的主机名无法解析为计算机知道的任何主机。

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

如果您没有为mysql容器指定任何网络,则它将连接到默认的网桥网络。并且,如果您创建了新网络,但未指定类型,则默认为网桥驱动程序。

为了从主机访问容器,您需要执行以下任一操作:

  1. 将容器连接到主机网络
  2. 或从网桥网络上的容器中,将端口映射到主机,如上述解决方案中所建议的那样。然后,您可以localhost:<portnum>通过主机访问该容器上专门映射的端口。