1

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

我可以重新配置/重新编程此服务以绑定到所有接口,但这可能在其他上下文中具有安全隐患。有没有办法在 docker 容器内公开绑定到 localhost 的服务?

4

1 回答 1

1

我最终在 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:]'用来发现 docker 容器的 ip。由于通常 docker 容器只有一个公共 ip,因此效果很好。

于 2016-11-02T15:29:19.697 回答