【问题标题】:How to expose a service running inside a docker container, bound to localhost如何公开在 docker 容器内运行的服务,绑定到 localhost
【发布时间】:2016-11-02 23:29:19
【问题描述】:

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

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

【问题讨论】:

  • 我打算建议 iptables--cap-add=NET_ADMIN 但容器名称空间中的 DNAT 似乎存在一些问题

标签: docker docker-networking


【解决方案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,因此效果很好。

【讨论】:

    猜你喜欢
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多