我有一个在docker-container中运行的服务,默认情况下只绑定到localhost。
我可以重新配置/重新编程此服务以绑定到所有接口,但这可能在其他上下文中具有安全隐患。有没有办法在docker容器中公开绑定到localhost的服务?
答案 0 :(得分:1)
我最终在docker容器中使用socat,将公共接口上相关端口号上的任何tcp连接代理到私有接口。
例如,可以将其添加到docker-container运行脚本,以将localhost:3000上绑定的服务代理到:3000,其中它可以像任何其他服务一样进行EXPOSED和链接。确保在容器内安装socat。
socat TCP4-LISTEN:3000,bind=`hostname -I | tr -d '[:space:]'`,fork TCP4:localhost:3000 &
请注意;我正在使用hostname -I | tr -d '[:space:]'
来发现docker容器的ip。由于通常docker容器只有一个公共ip,所以效果很好。