mysql - 如何通过 SSH 连接到 MySQL Docker 容器?

当我尝试通过 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 服务引入互联网对我来说是不行的。

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


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

最佳答案

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

ports:
  - 127.0.0.1:3306:3306

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

docker-compose exec mysql bash

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

https://stackoverflow.com/questions/42187534/

相关文章:

python - 如何在构建过程中安装私有(private) Python 包

linux - 如何删除所有 Docker 容器

git - 何时从 Docker 存储库中提取,何时从 Git 存储库中提取然后构建?

node.js - 为什么 NPM 在 Docker 容器中不可用

docker - Alpine Linux 处理证书的方式与 Busybox 不同吗?

docker - 使用 pyodbc 将 docker python 连接到 SQL 服务器

docker - Artifactory 作为 docker 注册表

java - 如何减小我的 java/gradle docker 镜像大小?

ssl - 在 Synology NAS 上使用 Docker 在 GitLab 上启用 SSL

node.js - node_modules 上的 docker-compose 卷但为空