美文网首页
Centos docker 容器无法被外网访问

Centos docker 容器无法被外网访问

作者: 这是一个无趣人 | 来源:发表于2022-04-15 14:26 被阅读0次

问题

在一台centos7的服务器上 安装了nginx容器, -p 8080:80 由8080端口代理到内部80端口,外部无法访问,提示超时。

处理方法

  • 服务器内部本地 curl看下是否能够获取数据
  curl http:127.0.0.1:8080   // 如果无法访问 可以认为是container没有启动成功
  • 查看防火墙端口是否开启
firewall-cmd --list-ports
# 未开启 使用下面命令开启端口
firewall-cmd --zone=public --add-port=8080/tcp
  • 如果开启后依旧无法访问尝试 关闭整个防火墙试下是否能够成功
systemctl stop firewalld
  • ip转发没有打开
sysctl net.ipv4.ip_forward   // 0 是未打开 1 是打卡

# 打开步骤
vi /etc/sysctl.conf
# 或者
vi /usr/lib/sysctl.d/00-system.conf
# 添加如下代码:
net.ipv4.ip_forward=1
# 重启network服务
systemctl restart network
# 查看是否修改成功
sysctl net.ipv4.ip_forward
  • 最后定位到的问题
    启动docker并进行端口映射后,docker会在iptables中添加DNAT规则,将收到的对应端口的包转换ip并进行转发,同时添加规则将所有来自docker网域的ip进行转换。
    但是在Centos7上出现docker可以正常访问外网,但是外网发出的请求在经过eth1接收转发后送达不到docker0,或者送到却出现(oui Unknown)的状况。暂时不清楚这到底是为什么经过DNAT后无法送达docker0.
  1. 关闭docker的iptables配置 (采用方法)
vim /etc/default/docker
# 写入  -iptables=false
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -iptables=false"
# 修改文件/etc/docker/daemon.json
vim /etc/docker/daemon.json
 # 写入
{
  "iptables": false
}
# 重启docker
systemctl restart docker
  1. 或者直接尝试 关闭iptables
service iptables stop 

相关文章

网友评论

      本文标题:Centos docker 容器无法被外网访问

      本文链接:https://www.haomeiwen.com/subject/ldtqertx.html