Docker堆栈:将端口发布到主机
这个问题
当运行$ docker stack deploy ...
,是否有任何方法发布一个只能被主机访问的端口?
我正在使用在Digital-Ocean上运行的Ubuntu服务器实例。
例
假设我运行一个名为db的mysql服务。 我可以从不同的容器访问数据库, 而不需要在我docker-compose.yml
文件中有ports: ["3306:3306"]
。 从我的其他容器,我可以使用数据库作为MySQL主机和默认端口。 这按预期工作。
现在我想从我的主机访问数据库。 据我所知,这是不可能发布一个端口。 当我把ports: ["3306:3306"]
放在我docker-compose.yml
文件中时,我可以使用mysql -uroot -p -h 127.0.0.1
访问数据库。 问题是,数据库现在可以从外部访问,我可以使用mysql -uroot -p -h foo.com
从任何PClogin到数据库,这似乎是不必要的不安全。
我可以想一些其他的用例,你可能需要这样做:
- 使用任何需要由泊坞窗容器访问的数据库, 也可以从泊坞外的应用程序访问。
- 使用nginx,不在docker中运行,作为在docker中运行的应用程序的反向代理。 没有暴露的应用程序本身的networking
如果这些用例可以使用其他解决scheme解决,我当然很高兴听到。
我试过的一些东西
- 使用防火墙阻止对端口3306的访问。这不起作用,因为docker工人使用IP表。
- 在撰写文件中使用
ports: ["127.0.0.1:3306:3306"]
。 当用户docker-compose up
时,这可以按照预期docker-compose up
。 不幸的是,这在使用Docker堆栈时不起作用。 - 许多其他可能的解决scheme并没有带领任何地方…