Docker堆栈:将端口发布到主机

时间:2017-10-26 11:44:29

标签: docker firewall docker-swarm docker-stack

问题

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

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

例如

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

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

我可以考虑一些您可能需要的其他用例:

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

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

我试过的一些事情

  • 使用防火墙来阻止对端口3306的访问。这不起作用,因为docker与ip-tables混淆。
  • 在撰写文件中使用ports: ["127.0.0.1:3306:3306"]。这在用户docker-compose up时按预期工作。不幸的是,这在使用Docker堆栈时不起作用。
  • 许多其他可能无法解决的解决方案......

0 个答案:

没有答案