2017-02-12 223 views
4

当我尝试通过SSH隧道连接到主机Mashine(vServer),然后尝试通过内部Docker Container-IP进行连接时,我无法连接到MySQL。如何通过SSH连接到MySQL Docker容器?

这是我的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端口带入互联网并不是一个好的做法。


那么什么是一个很好的做法,连接到我的码头mysql容器与SSH,但保持MySQL端口关闭?

回答

7

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

ports: 
    - 127.0.0.1:3306:3306 

你也可以省略ports部分完全(无端口绑定在所有),并使用MySQL客户端这是已经在容器内。

docker-compose exec mysql bash 

然后在容器中运行mysql命令,以执行您想要执行的任何查询。

+1

第一个建议为我解决了这个问题,现在我可以通过SSH通过HeidiSQL连接到我的MySQL-Container,而无需付出很多努力。你的第二个建议对小事很好,但我喜欢我的GUI HeidiSQL。 – TatzyXY

3

一个简单的方法来实现,这是在泊坞窗conatiner的SSH端口转发到你的主机上的一些端口,即

ports: 
    - 22:<some free host port> 

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

+0

这也是一个很好的答案,但目前我的目的有点矫枉过正。然后,我必须dockerize ssh服务并使其可以访问其他容器。起初我会和Dan Lowe的回答保持一致,但是当项目变得更大时,你的答案可能就是要走的路。 – TatzyXY

+0

有没有必要dockerize ssh。你可以简单地通过'ssh localhost:访问容器' –

+0

@TobiasGuggenmos只有当sshd服务器在容器内监听时,这在大多数容器中并不是这样。 –

相关问题