Docker堆栈:将端口发布到主机 问题
在运行Docker堆栈:将端口发布到主机 问题,docker,firewall,docker-swarm,docker-stack,Docker,Firewall,Docker Swarm,Docker Stack,在运行$docker stack deploy…时,是否有任何方法可以发布一个端口,使其仅可供主机访问 我正在使用一个运行在Digital Ocean的Ubuntu服务器实例 例子 假设我运行了一个名为db的mysql服务。我可以从不同的容器访问数据库,而无需在我的docker compose.yml文件中具有端口:[“3306:3306”]。从我的另一个容器中,我可以使用db作为mysql主机和默认端口。这正是我们想要的 现在我想从我的主机访问数据库。据我所知,如果不发布端口,这是不可能的。当
$docker stack deploy…
时,是否有任何方法可以发布一个端口,使其仅可供主机访问
我正在使用一个运行在Digital Ocean的Ubuntu服务器实例
例子
假设我运行了一个名为db的mysql服务。我可以从不同的容器访问数据库,而无需在我的docker compose.yml
文件中具有端口:[“3306:3306”]
。从我的另一个容器中,我可以使用db作为mysql主机和默认端口。这正是我们想要的
现在我想从我的主机访问数据库。据我所知,如果不发布端口,这是不可能的。当我将端口:[“3306:3306”]放入我的docker compose.yml
文件时,我可以使用mysql-uroot-p-h 127.0.0.1
访问数据库。问题是,现在数据库也可以从外部访问,我可以使用mysql-uroot-p-hfoo.com
从任何PC登录数据库,这似乎是不必要的
我可以想到一些您可能需要的其他用例:
- 使用需要docker容器访问的任何数据库,以及从docker外部的应用程序访问的数据库
- 使用nginx(不在docker中运行)作为docker中运行的应用程序的反向代理。无需将应用程序本身暴露于web
- 使用防火墙阻止对端口3306的访问。这不起作用,因为docker弄乱了ip表
- 使用撰写文件中的
。当用户端口:[“127.0.0.1:3306:3306”]
docker编写时,这将按预期工作。不幸的是,这在使用Docker堆栈时不起作用
- 很多其他可能的解决方案都没有带来任何结果