我试图让所有 docker 实例和远程服务器上的本地主机都能发现 MySQL,但阻止 MySQL 与外部通信除了特定 IP 地址(我的家庭 IP),或通过 SSH 隧道。
我最近发现docker-compose.yml
您可以在文件中指定ports
以下内容:
mysql: image: mysql:5.7 ports: - "127.0.0.1:3306:3306"
然而,这仅意味着它仅可用于本地主机,并且不能被任何其他接口使用。
你可能会问“那你为什么不直接用 SSH 隧道连接呢?”好吧,这确实是一个可以直接连接到远程 docker 实例的解决方案,但是,我无法允许我的当地的docker 容器使用该隧道端口,特别是 PHP 7.1 容器。
我也尝试过改变 IPTables 来忽略端口 3306 上的所有外部通信,但由于某种原因,它仍然打开。
我已将 Putty 设置为将远程端口 3306 隧道连接到本地端口 10000。MySQL Workbench 可以像往常一样在 10000 上访问它,因此隧道正在发挥作用。
基本上,我的目标是允许本地主机上的应用程序访问远程数据库,但不能有效地打开远程数据库bind 0.0.0.0
,因为这是极其不安全的,而且我知道访问 MySQL 的最佳方式是通过 SSH 上的隧道直接连接到盒子。
我研究过让本地 docker 尝试使用主机 IP,expose_hosts
用于 docker-compose 等各种操作。在这里我撞墙了。
答案1
我相信在本地机器上,您需要将 tunel 绑定到 docker 网络接口,而不是 localhost 或 0.0.0.0。这将使您能够从容器中使用此端口,而无需在外部打开它。
在我的计算机上,我的docker接口(docker0
)有地址172.17.0.1
,所以我会尝试绑定到这个地址,然后从容器连接到这个地址。