如何通过SSH连接到MySQL Docker容器?
当我尝试通过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端口关闭?
一种简单的方法是将MySQL端口绑定到本地主机地址。假设主机有一个可用于Docker之外的mysql客户端。
ports:
- 127.0.0.1:3306:3306
你也可以省略ports
部分完全(无端口绑定在所有),并使用MySQL客户端这是已经在容器内。
docker-compose exec mysql bash
然后在容器中运行mysql
命令,以执行您想要执行的任何查询。
一个简单的方法来实现,这是在泊坞窗conatiner的SSH端口转发到你的主机上的一些端口,即
ports:
- 22:<some free host port>
,然后通过SSH访问容器您使用的主机端口。请注意,使用端口22是一个坏主意,因为这会导致与主机上运行的ssh服务器发生冲突。
这也是一个很好的答案,但目前我的目的有点矫枉过正。然后,我必须dockerize ssh服务并使其可以访问其他容器。起初我会和Dan Lowe的回答保持一致,但是当项目变得更大时,你的答案可能就是要走的路。 – TatzyXY
有没有必要dockerize ssh。你可以简单地通过'ssh localhost:
@TobiasGuggenmos只有当sshd服务器在容器内监听时,这在大多数容器中并不是这样。 –
第一个建议为我解决了这个问题,现在我可以通过SSH通过HeidiSQL连接到我的MySQL-Container,而无需付出很多努力。你的第二个建议对小事很好,但我喜欢我的GUI HeidiSQL。 – TatzyXY