docker启动后外部无法访问外部端口

内容纲要

docker容器下创建服务并启动后,外部无法通过开放的端口访问。比如创建了一个postgresql容器,并使用宿主机Centos7的5432端口对外服务,但启动后,外部服务无法链接5432端口,但5432端口确实已经被占用。

  1. 首先考虑防火墙,但防火墙已经关闭,排除。

  2. 经过查询发现Centos下有个端口转发服务,但该服务时关闭的,所以无法访问。

    通过cat /proc/sys/net/ipv4/ip_forward查看ip转发是否开启。如果该值为0则需要配置其开启

    cat /proc/sys/net/ipv4/ip_forward
    0
  3. 临时开启,(写入内存,在内存中开启)

    echo "1" > /proc/sys/net/ipv4/ip_forward
  4. 永久开启,(写入内核)
    在 /etc/sysctl.conf 下加入此行   net.ipv4.ip_forward = 1

    echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
    # 重新加载文件使其生效
    sysctl -p

    这样宿主机就可以将端口数据转发到docke容器的服务端口上了

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注