AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 798986
Accepted
davidA
davidA
Asked: 2016-08-25 21:47:24 +0800 CST2016-08-25 21:47:24 +0800 CST 2016-08-25 21:47:24 +0800 CST

通过 docker 使用 iptables 端口重定向

  • 772

我有一台运行 Jenkins(端口 8080 上的 HTTP)的 Linux 服务器,并且同一台服务器也在运行 Docker 1.12.1。我使用了一些 iptables 规则(根据官方 Jenkins 安装文档)将端口 8080 重定向到主机的端口 80,因此默认 HTTP 将适用于 Jenkins(即http://myserver,而不是http://myserver:8080):

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080

然而,这些规则破坏了 Docker 在命令期间通过 HTTP 下载正确资源的能力docker build。例如,RUN apt-get update失败并出现多个“下载失败”错误。在容器内执行wget http://www.google.com会返回 Jenkins 主页的 HTML。来自主机的 HTTP GET 工作正常。删除 iptables 规则会导致RUN apt-get update再次工作。所以我认为那些 iptables 规则正在干扰 docker 的网络机制。

这样的端口重定向可以与 Docker 共存吗?如果是这样,如何编写 iptables 规则来解决这个问题?

port-forwarding iptables docker jenkins redirection
  • 1 1 个回答
  • 7641 Views

1 个回答

  • Voted
  1. Best Answer
    davidA
    2016-08-29T19:18:26+08:002016-08-29T19:18:26+08:00

    对 iptables 规则的可能修改是删除两者并替换为:

    iptables -t nat -A PREROUTING -p tcp -m tcp -i eth0 --dport 80 -j REDIRECT --to-ports 8080
    

    这将确保,就我而言,只有通过接口eth0的端口 80 上的 TCP 流量才会被重定向。来自主机上 docker 容器的流量不会被重定向。请注意,我也省略了 localhost 重定向,尽管可能可以对其进行修改以避免过滤来自 interface 的任何内容docker0。

    另一种解决方案是使用反向代理将 TCP 端口 80 上的传入 HTTP 请求转发到主机的端口 8080。我将Caddy与以下简单的 Caddyfile 一起使用:

    localhost:80
    proxy / localhost:8080
    

    有了这个,我可以完全删除 iptables 规则。

    这似乎在端口 80 上提供了一个简单的重定向,并允许 docker 容器正常使用传出 HTTP。

    • 7

相关问题

  • 为 Cisco ASA 5510 上的端口 443/80 创建 NAT 规则和安全策略

  • 慢速路由问题

  • 通过其子网内的公共 IP 连接到默认主机是否会导致任何问题?

  • 端口镜像作为 Windows 服务

  • 使用 iptables 和 dhcpd 进行端口转发

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve