我正在使用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
除了- "3306:3306"
部分外,我试图将wex_server_proxy
放在无效的地方。
要修改的文件就是这个文件:
我添加了ports
部分,打开了3306端口:)然后,它起作用了。
答案 0 :(得分:2)
我注意到您没有将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容器指定任何网络,则它将连接到默认的网桥网络。并且,如果您创建了新网络,但未指定类型,则默认为网桥驱动程序。
为了从主机访问容器,您需要:
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 侦听所有网络接口。