【问题标题】:Access locally mysql on docker from remote through SSH tunnel通过 SSH 隧道从远程访问 docker 上的本地 mysql
【发布时间】:2020-09-17 18:36:39
【问题描述】:

我正在尝试通过 SSH 隧道从工作台访问我的 mysql 数据库,mysql 在一个容器中(使用 docker-compose)。

这是我在 docker-compose 中的 mysql 容器配置:

mysql:

image: mysql:5.7
container_name: mysql
expose:
  - 3306
ports:
  - '3306:3306'
volumes:
  - ./mysql:/var/lib/mysql
environment:
  - "MYSQL_ROOT_PASSWORD=#####"
  - "MYSQL_DATABASE=#####"
  - "MYSQL_USER=#####"
  - "MYSQL_PASSWORD=#####"
restart: always

但是我收到“无法连接到 MySQL”错误,就像我的端口没有很好地从 SSH 转发到 MySQL 容器(因此,没有击中好门)。

请注意,我不允许从 mysql 进行远程访问,因为我只想保持 SSH/localhost 访问。

你有什么想法吗?谢谢

【问题讨论】:

  • ssh -L 选项应该转发到容器上已发布的ports:;你能显示你正在运行的实际命令和你得到的实际错误吗?
  • 当我试图通过工作台处理我的连接时,我无法控制命令,但如果我登录到 ssh,然后尝试类似:mysql -u <mysql_user> -p -h localhost -p 3306 我得到:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
  • mysql 客户端将localhost 误解为具体表示该套接字文件;您可能会看到-h 127.0.0.1(使用localhost 众所周知的IPv4 地址)是否有所作为。
  • 你是对的,127.0.0.1 更改了 mysql 响应:Can't connect to MySQL server on '127.0.0.1' (111)。也许是绑定问题?

标签: mysql docker docker-compose


【解决方案1】:

您已经公开了 3306 端口,因此您应该可以使用以下命令从系统访问它 -

mysql -u <mysql_user> -p -h localhost -p 3306

如果无法访问,请尝试以交互模式登录 mysql 容器,在 docker 会话中访问它。

【讨论】:

  • “在 docker 会话中访问”是什么意思?我要做的基本上是通过 ssh 登录服务器,然后通过点击 3306 联系本地主机。但我仍然收到错误(请参阅我上面的评论)
  • 除非您允许 mysql 端口 3306 的传入流量,否则您无法远程访问您的服务器 mysql 数据库。这是第一件事!其次,如果您在服务器中进行 ssh 操作,然后尝试连接到 docker 映像中的 mysql 服务器,则可能会检查您的 docker 容器是否正在运行。还要确保您提供的凭据是否正确。如果您提供“docker ps”的输出,将会很有帮助。
  • 你碰到了一件珍贵的事情:如果我试图从我的本地主机联系容器,这是远程吗?我对 docker 不是很熟悉,即使我理解了巨大的线条,它仍然是不准确的。这是我的 docker ps 行:mysql:5.7 "docker-entrypoint.s…" 3306/tcp, 33060/tcp
  • 我很难读到这个。请在您的问题中的“docker ps”输出上发布屏幕截图。我对查看输出中列出的容器状态更感兴趣。
  • 哦,是的,对不起!它似乎非常好,因为 mysql 工作正常并且 php 应用程序(在另一个容器上运行)正在连接到它。 prnt.sc/uizuiz
猜你喜欢
  • 2016-09-25
  • 2015-12-01
  • 2019-07-15
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2018-06-09
相关资源
最近更新 更多