【问题标题】:How to connect to a MySQL Docker Container via SSH?如何通过 SSH 连接到 MySQL Docker 容器?
【发布时间】:2017-06-30 11:07:11
【问题描述】:

当我尝试通过 SSH 隧道连接到主机 Mashine (vServer),然后尝试通过内部 docker Container-IP 连接时,我无法连接到 MySQL。

这是我的 docker-compose 文件。

version: '2'
services:
  mysql:
    build: ./mysql
    environment:
      MYSQL_ROOT_PASSWORD: test
    volumes:
      - ./db:/var/lib/mysql

我找到的唯一解决方案是将 mysql 容器的 MySQL-Port 转发到 Host-Mashine。

version: '2'
services:
  mysql:
    build: ./mysql
    environment:
      MYSQL_ROOT_PASSWORD: test
    volumes:
      - ./db:/var/lib/mysql
   ports:
     - 3306:3306

然后我可以通过主机 IP 连接到 MySQL,但这没有 SSH,它直接通过 TCP 和端口。 将 MySQL 服务引入 Internet 对我来说是不行的。

可以在这里找到原因https://security.stackexchange.com/questions/63881/is-it-not-safe-to-open-mysqls-port-to-the-internet 为什么将 mysql 端口接入互联网不是一个好习惯。


那么使用 SSH 连接到我的 docker mysql 容器但保持 mysql 端口关闭的好习惯是什么?

【问题讨论】:

    标签: mysql docker ssh docker-compose


    【解决方案1】:

    一种简单的方法是将 MySQL 端口仅绑定到 localhost 地址。这假设主机在 Docker 之外有一个可用的 mysql 客户端。

    ports:
      - 127.0.0.1:3306:3306
    

    您也可以完全省略 ports 部分(根本没有端口绑定),并使用容器内已经存在的 mysql 客户端。

    docker-compose exec mysql bash
    

    然后在容器内运行mysql 命令来做任何你想做的查询。

    【讨论】:

    • 第一个建议为我解决了这个问题,现在我可以通过 SSH 通过 HeidiSQL 连接到我的 MySQL 容器,而无需付出太多努力。您的第二个建议适用于小事情,但我喜欢我的 GUI HeidiSQL。
    【解决方案2】:

    实现此目的的一种简单方法是将 docker conatiner 的 ssh 端口转发到主机上的某个端口,即

    ports:
       - 22:<some free host port>
    

    然后通过 ssh 访问容器到您使用的主机端口。请注意,使用端口 22 是个坏主意,因为这会导致与您主机上运行的 ssh 服务器发生冲突。

    【讨论】:

    • 这也是一个很好的答案,但目前对于我的目的来说有点矫枉过正。然后我必须对 ssh 服务进行 dockerize 并使其可供其他容器访问。起初我会坚持 Dan Lowe 的回答,但当项目变得更大时,你的回答可能就是要走的路。
    • 不需要 dockerize ssh。您可以通过ssh localhost:&lt;some free port&gt; 简单地访问容器
    • @TobiasGuggenmos 仅当 sshd 服务器在容器内侦听时,在大多数容器中并非如此。
    猜你喜欢
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2016-10-24
    • 1970-01-01
    • 2014-10-15
    • 2020-04-14
    相关资源
    最近更新 更多