【问题标题】:docker: hide port with --net=hostdocker:使用 --net=host 隐藏端口
【发布时间】:2018-10-07 11:38:26
【问题描述】:

如果 docker 容器设置为 network_mode: host,则容器中打开的任何端口都将在 docker 主机上打开不需要-p or -P docker run选项。

我如何对公共隐藏端口并使其只能在localhost 中访问。

【问题讨论】:

    标签: linux docker networking docker-compose dockerfile


    【解决方案1】:

    如果您使用--net=host 运行,则您使用的是主机网络堆栈,并且没有其他 Docker 控制它与网络的交互方式。如果您只想监听特定接口,您的服务器将 绑定(2) 到其上的地址,就像直接在主机上运行的任何其他进程一样。大多数更高级别的服务器包都可以选择侦听某个特定地址,您可以将服务器设置为仅侦听 127.0.0.1。

    使用--net=host 通常不是最佳做法。如果您省略该选项并使用标​​准 Docker 网络,则 docker run -p 选项具有绑定到特定主机 IP 地址的选项。如果您的服务器侦听容器内的 80 端口,而您实际上希望它侦听 8888 端口并且只能从当前主机访问,则可以

    docker run -p 127.0.0.1:8888:80 ...
    

    (在后一种情况下,容器内的进程必须监听 0.0.0.0 或其他一些等效的“所有地址”设置,即使您不希望它可以从外部访问 -主持人。)

    【讨论】:

    • 嗨,感谢您的回答,我使用 --net=host 的原因是因为没有它,在 docker 容器内,curl http://userservice:2531 给出 couldn't resolve host userservice 错误,而在主机操作系统上,我可以完美地卷曲这个。在 docker 中添加--net=host 后,容器能够正确解析主机名。 http://userservice:2531 是托管在同一网络内另一台机器上的网站。所以我想我可以毫无问题地将它连接到容器内。那么,最后有没有办法在容器内没有--net=host 的情况下解析“字母”主机名?谢谢!
    【解决方案2】:

    您可能需要查看iptables

    【讨论】:

    • 在 docker 中有什么通用的方法吗?
    猜你喜欢
    • 2018-09-12
    • 2016-12-31
    • 2016-11-07
    • 2021-02-15
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多