mysql - Ubuntu 上的 Docker MySQL 连接问题
问题描述
我很难连接到在 Ubuntu 上运行的 MySql 的 docker 容器实例。以下是创建 docker 的代码:
docker run --name=mysql_db --env="MYSQL_ROOT_PASSWORD=password" -p 3308:3308 -v /opt/permstorage:/var/lib/mysql -d mysql:latest
我一直在尝试诊断来自网络中另一台 Ubuntu 机器的访问,但我一直被拒绝连接。我可以使用下面的命令登录到 docker,所以我知道我的密码是正确的。
docker exec -it mysql_db mysql -uusername -p
我已经使用 AWS 服务器成功运行了完全相同的代码,但由于某种原因,它无法在我的网络中运行,我怀疑它与 IP 地址有关,但我无法诊断如何解决这个问题。
我已经在ufw中打开了3308端口。但即使在本地使用 dbeaver,我也无法访问 docker mysql 实例。我应该从哪里开始诊断?在下面添加附加信息:
(base) user@Alienware:~/Downloads$ telnet 127.0.0.1 3308
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Connection closed by foreign host.
(base) user@Alienware:~/Downloads$ telnet 192.168.4.249 3308
Trying 192.168.4.249...
telnet: Unable to connect to remote host: Connection refused
(base) user@Alienware:~/Downloads$ telnet localhost 3308
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
(base) user@Alienware:~/Downloads$ sudo ufw status
[sudo] password for user:
Status: active
To Action From
-- ------ ----
3389/tcp ALLOW Anywhere
22/tcp ALLOW Anywhere
3389 ALLOW Anywhere
3308 ALLOW Anywhere
3389/tcp (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
3389 (v6) ALLOW Anywhere (v6)
3308 (v6) ALLOW Anywhere (v6)
解决方案
原来我的错也将内部端口映射到 3308。以下更正了我的问题:
docker run --name=mysql_db --env="MYSQL_ROOT_PASSWORD=password" -p 3308:3306 -v /opt/permstorage:/var/lib/mysql -d mysql:latest
推荐阅读
- python - 从 http://tinywebdb.appinventor.mit.edu 获取 JSON
- android - RecyclerView - 向上或向下滚动一屏(不基于适配器位置)
- javascript - 您能否提出任何导出服务器图像的解决方案?(如 OSM)
- node.js - Express.js 和 CORS
- apache - php73-mbstring 已安装,但未在 phpinfo 文件中显示,magento websitet 无法正常工作
- node.js - 在 Sequelize 中使用连接 URI 和读取复制
- sql - 大于运算符的优化
- python - 如何将结果写入输出文件
- validation - .NET Core 2.2 Web API - 字段验证装饰器不会在手动分配时触发
- java - java.sql.SQLException: JZ006: Caught IOException: java.net.SocketTimeoutException: Read timed out 使用 getCause() 查看错误链