2

问题

运行时$ docker stack deploy ...,有没有办法以只有主机可以访问的方式发布端口?

我目前正在使用在 Digital-Ocean 上运行的 Ubuntu 服务器实例。

例子

假设我运行一个名为db的mysql服务。我可以从不同的容器访问数据库,而无需我的文件中。从我的另一个容器中,我可以将db用作 mysql 主机和默认端口。这按预期工作。ports: ["3306:3306"]docker-compose.yml

现在我想从我的主机访问数据库。据我所知,如果不发布端口,这是不可能的。当我放入ports: ["3306:3306"]我的docker-compose.yml文件时,我可以使用mysql -uroot -p -h 127.0.0.1. 问题是数据库现在也可以从外部访问,我可以从任何 PC 使用 登录到数据库mysql -uroot -p -h foo.com,这似乎是不必要的不​​安全。

我可以想到一些您可能需要它的其他用例:

  • 使用需要由 docker 容器访问的任何数据库,也可以从 docker 之外的应用程序访问。
  • 使用不在 docker 中运行的 nginx 作为在 docker中运行的应用程序的反向代理。无需将应用程序本身暴露给网络

如果这些用例可以使用其他解决方案来解决,我当然很乐意听到。

我尝试过的一些事情

  • 使用防火墙阻止对端口 3306 的访问。这不起作用,因为 docker 与 ip-tables 混淆。
  • ports: ["127.0.0.1:3306:3306"]在撰写文件中使用。当用户docker-compose up. 不幸的是,这在使用 Docker 堆栈时不起作用。
  • 许多其他可能的解决方案都没有导致任何地方......
4

0 回答 0