1.创建一个mysql ,无法外部访问
docker run -d --name mysql_container -e MYSQL_ROOT_PASSWORD=liuyunshengsir -v /path/to/mysql_data:/var/lib/mysql mysql
2.设置规则外部直接可访问
要使用 iptables 将网络流量转发给内部容器中的 MySQL 服务,你可以按照以下步骤进行设置:
- 确保系统已经启用了 IP 转发功能
vim/etc/sysctl.conf
net.ipv4.ip_forward=1
保存文件后,使用以下命令使更改生效:
sudo sysctl -p
- 设置 NAT 规则来实现端口转发。假设 MySQL 容器监听的端口是 3306,并且外部访问的端口是 8888,你可以使用以下命令来添加 iptables 规则:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 13306 -j DNAT --to-destination 172.17.0.2:3306
替换 <内部容器的IP地址>
为你的 MySQL 容器实际的 IP 地址。
- 允许转发的数据包通过防火墙。使用以下命令启用转发:
sudo iptables -A FORWARD -p tcp --dport 13306 -d <内部容器的IP地址> -j ACCEPT
替换 <内部容器的IP地址>
为你的 MySQL 容器实际的 IP 地址。
- 如果你的系统上启用了防火墙(例如 UFW),请确保允许相应的端口通过防火墙。例如,在 UFW 中,你可以运行以下命令开放 13306端口:
sudo ufw allow 13306
这将允许外部主机连接到你的系统的 13306端口。
完成上述步骤后,当有外部请求进入系统的 13306端口时,iptables 将会将流量转发给内部容器中 MySQL 服务的 3306 端口,从而实现端口转发。请确保你的 MySQL 容器已经正确配置并监听了相应的端口。
3.永久保存规则
在 CentOS 系统上,可以使用以下方法来永久设置 iptables
规则:
- 使用
iptables
命令保存和加载规则:这是一种简单的方法,当系统重启时会自动加载保存的规则。
- 配置所需的
iptables
规则。例如,添加规则:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -j DROP
- 保存规则到文件:
sudo service iptables save
- 这将把当前的
iptables
规则保存到/etc/sysconfig/iptables
文件中。 - 当系统启动时,
iptables
服务将自动加载保存的规则。
- 使用
iptables-services
包:这是一个包含iptables
服务的软件包,可让你更方便地管理iptables
规则。
- 首先,确保已安装
iptables-services
包:
sudo yum install iptables-services
- 启动
iptables
服务,并设置为在系统启动时自动启动:
sudo systemctl start iptables
sudo systemctl enable iptables
- 配置所需的
iptables
规则。例如,添加规则:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -j DROP
- 保存规则到文件:
sudo service iptables save
- 这将把当前的
iptables
规则保存到/etc/sysconfig/iptables
文件中。 - 当系统启动时,
iptables
服务将自动加载保存的规则。
确保在配置 iptables
规则之后,将其保存并加载,以便规则在系统重启后仍然生效。