首先,运行的容器应用与远程访问之间的关系,如下图:

2024-08-09T00:45:45.png

容器运行后,会通过ports命令将自身端口通过docker-proxy操作netfilter实现端口映射。
如果防火墙开启,且没有放行策略,也就无法访问。
需要将防火墙增加策略或者直接关闭。

# 检查当前防火墙状态
systemctl status firewalld

# 关闭防火墙并禁用开机启动
systemctl stop firewalld
systemctl disable firewalld

# 再次检查防火墙状态
systemctl status firewalld

其次,Linux防火墙中的几个关键部件的关系。
Linux防火墙在内核层面表现为netfilter模块,该模块在TCP/IP协议转运行过程中增加部分钩子实现对数据包的处理功能。
iptables是一个命令,用于用户在shell环境下调用netfilter模块操作防火墙规则增删改查。
ufw/firewalld,是另外多种操作netfilter方式的软件,并且通过systemd注册为系统服务。

再次,实现容器端口从远端访问还有另外一种方式,通过bt panel面板,或者nginx等反向代理进行。这个时候牵扯到路由转发,需要打开系统转发内核参数。

2024-08-09T00:54:25.png

# 修改/etc/sysctl.conf文件 ,增加如下内容
net.ipv4.ip_forward=1

# 使用sysctl命令生效配置
sysctl -p

# 检查是否生效
cat /proc/sys/net/ipv4/ip_forward

还有一个selinux的问题。在使用过程中,一般会在云主机或者裸金属机器安装完系统后进行初始化配置,并及时将selinux禁用掉。如果开启selinux,可能会出现权限等异常问题。

# 检查当前状态
getenforce

# 临时关闭selinux
setenforce 0

# 设置永久关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
最后修改:2024 年 08 月 09 日
如果觉得我的文章对你有用,请随意赞赏