当我尝试通过SSH隧道连接到Host 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端口关闭是一个好习惯吗?
答案 0 :(得分:12)
一种简单的方法是将MySQL端口仅绑定到localhost地址。假设主机在Docker之外有一个mysql客户端。
<body>
<%= render 'shared/top_bar' %>
<div class="container">
<%= render 'shared/errors' %>
<%= yield %>
</div>
<%= render 'shared/footer' %>
</body>
你也可以完全省略ports:
- 127.0.0.1:3306:3306
部分(根本没有端口绑定),并使用已经在容器内的mysql客户端。
ports
然后在容器内运行docker-compose exec mysql bash
命令以执行您想要执行的任何查询。
答案 1 :(得分:3)
实现此目的的一种简单方法是将docker conatiner的ssh端口转发到主机上的某个端口,即
ports:
- 22:<some free host port>
然后通过ssh访问容器到您使用的主机端口。请注意,使用端口22是个坏主意,因为这会导致与主机上运行的ssh服务器发生冲突。