zwi*_*ion 4 mysql phpstorm docker
在 MAC 操作系统中运行。
\n按照使用 Docker 进行 MySQL 服务器部署的这些基本步骤,我尝试通过 phpstorm 数据库与容器建立连接。
\n我收到图片中的错误:
\n\n我可以通过终端访问它:
\ndocker exec -it 0ed bash\nbash-4.2# mysql -uroot -pdockerLocal\nmysql: [Warning] Using a password on the command line interface can be insecure.\nWelcome to the MySQL monitor. Commands end with ; or \\g.\nYour MySQL connection id is 47\nServer version: 5.7.25 MySQL Community Server (GPL)\n\nCopyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.\n\nOracle is a registered trademark of Oracle Corporation and/or its\naffiliates. Other names may be trademarks of their respective\nowners.\n\nType \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.\nmysql> show databases;\n+--------------------+\n| Database |\n+--------------------+\n| information_schema |\n| mysql |\n| performance_schema |\n| sys |\n| testdb |\n+--------------------+\n5 rows in set (0.00 sec)\n\nmysql> \nRun Code Online (Sandbox Code Playgroud)\n端口 3306 上没有进程正在运行netstat -vanp tcp | grep 3306。没有显示任何内容。
我的 Laravel 也无法连接到数据库服务器。
\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=testdb\nDB_USERNAME=root\nDB_PASSWORD=dockerLocal\nRun Code Online (Sandbox Code Playgroud)\n这是容器信息:
\ndocker ps -a\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n0edce223c684 mysql/mysql-server:5.7 "/entrypoint.sh mysq\xe2\x80\xa6" 34 minutes ago Up 34 minutes (healthy) 3306/tcp, 33060/tcp stupefied_johnson\nRun Code Online (Sandbox Code Playgroud)\n我如何测试这个连接以及如何让 phpstorm 数据库连接正常工作?
\n端口暴露后(这就是问题所在),我们无法使用root@localhost.
SELECT host, user FROM mysql.user;\n+-----------+---------------+\n| host | user |\n+-----------+---------------+\n| localhost | healthchecker |\n| localhost | mysql.session |\n| localhost | mysql.sys |\n| localhost | root |\n+-----------+---------------+\nRun Code Online (Sandbox Code Playgroud)\n这是错误:
\nConnection to @0.0.0.0 failed.\n [HY000][1130] null, message from server: "Host \'172.17.0.1\' is not allowed to connect to this MySQL server"\nRun Code Online (Sandbox Code Playgroud)\n解决方案就在这篇文章中。
\n\n\n检查数据库用户是否存在并且可以连接
\n在 MySQL 中,每个数据库用户都定义有 IP 地址,因此您可以允许 root 用户从本地主机 (127.0.0.1) 连接,但不能从其他 IP 地址连接。使用容器,您永远不会从127.0.0.1访问数据库,这可以解释问题。
\n
简而言之,如果我这样做,它就会起作用:
\nCREATE USER \'jerry\'@\'%\' IDENTIFIED BY \'jerrypassword\';\nSELECT host, user FROM mysql.user;\n+-----------+---------------+\n| host | user |\n+-----------+---------------+\n| % | jerry |\n| localhost | healthchecker |\n| localhost | mysql.session |\n| localhost | mysql.sys |\n| localhost | root |\n+-----------+---------------+\nRun Code Online (Sandbox Code Playgroud)\n
您需要将容器端口绑定到主机。
而不是做
docker run --name=mysql1 -d mysql/mysql-server:tag
Run Code Online (Sandbox Code Playgroud)
做
docker run --name=mysql1 -p 3306:3306 -d mysql/mysql-server:tag
Run Code Online (Sandbox Code Playgroud)
这会将容器的端口 3306 绑定到主机 127.0.0.1 上的端口 3306。
然后您将能够通过以下方式连接localhost:3306
参考:Docker Run - 发布或公开端口(-p,--expose)
| 归档时间: |
|
| 查看次数: |
11212 次 |
| 最近记录: |