如何公开在一个docker容器内运行的绑定到localhost的服务

我有一个服务在docker-container中运行,默认情况下只绑定到localhost。

我可以重新configuration/重新编程此服务以绑定到所有接口,但这可能在其他情况下具有安全性影响。 有什么方法可以公开一个绑定到docker容器内的localhost的服务吗?

我最终在docker容器中使用了socat来代理在公共接口上进入的相关端口号的任何tcp连接到私有接口。

例如,可以将其添加到docker-container运行脚本中,以将在localhost:3000上绑定的服务代理到:3000,在那里可以像其他服务一样进行EXPOSED和–linked。 确保在容器内安装socat。

socat TCP4-LISTEN:3000,bind=`hostname -I | tr -d '[:space:]'`,fork TCP4:localhost:3000 &

请注意; 我正在使用hostname -I | tr -d '[:space:]' hostname -I | tr -d '[:space:]'来发现docker容器的ip。 由于通常docker集装箱只有一个公共IP,这很好。