Docker 为运行中容器映射端口
使用iptables的方法
方法1
1、获得容器IP
将container_name 换成实际环境中的容器名
docker inspect --format={{'.NetworkSettings.IPAddress'}} container_name
2、 iptable转发端口
将容器的8000端口映射到Docker主机的8001端口
iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
方法2
1.提交一个运行中的容器为镜像
docker commit containerid foo/live
2.运行镜像并添加端口
docker run -d -p 8000:80 foo/live /bin/bash
使用firewall的方法
firewall命令行的管理工具是firewall-cmd,firewall要传递的参数args与iptables一致,需要用到一个选项--direct。该选项是firewall的自定义规则选项,将命令传递给防火墙。参数 <args> 可以是 iptables, ip6tables 以及 ebtables 命令行参数。
firewall-cmd --direct --passthrough { ipv4 | ipv6 | eb } <args>
为表 <table> 增加一个新链 <chain>
firewall-cmd --direct --add-chain { ipv4 | ipv6 | eb } <table> <chain>
从表 <table> 中删除链 <chain>
firewall-cmd --direct --remove-chain { ipv4 | ipv6 | eb } <table> <chain>
查询 <chain> 链是否存在与表 <table >. 如果是,返回0,否则返回1
firewall-cmd --direct --query-chain { ipv4 | ipv6 | eb } <table> <chain>
如果启用,此命令将有返回值。此命令没有输出信息。
获取用空格分隔的表 <table> 中链的列表。
firewall-cmd --direct --get-chains { ipv4 | ipv6 | eb } <table>
为表 <table> 增加一条参数为 <args> 的链 <chain> ,优先级设定为 <priority>。
firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
参考示例:
方式1:[reload生效,修改后重启才可生效]
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -s 192.168.1.0/24 -p tcp --dport=22 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 2 -p tcp --dport=22 -j DROP
方式2:[重载或重启后失效]
iptables -t filter -I INPUT_direct -s 192.168.1.20 -p tcp --dport=22 -j ACCEPT
iptables -A INPUT_direct -p tcp --dport=22 -j DROP
从表 <table> 中删除带参数 <args> 的链 <chain>。
firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb } <table> <chain> <args>
firewall-cmd --direct --remove-rule ipv4 filter INPUT 2 -p tcp --dport=22 -j DROP
查询带参数 <args> 的链 <chain> 是否存在表 <table> 中
firewall-cmd --direct --query-rule { ipv4 | ipv6 | eb } <table> <chain> <args>
获取表 <table> 中所有增加到链 <chain> 的规则,并用换行分隔。
firewall-cmd --direct --get-rules { ipv4 | ipv6 | eb } <table> <chain>
iptables结构
iptables -> Tables -> Chains -> Rules. 简单地讲,tables由chains组成,而chains又由rules组成
总结:
這里的主要重点是在firewall下面,如何为docker映射端口,其实在iptables下面,网上有很多的资料,但是firewall映射docker端口的方法是没有的,对于iptables及firewall不太熟悉的不用担心,之后会整理详细的iptables及firewall用法及原理。
【nginx优化】使用socket方式链接Nginx优化php-fpm性能
【环境配置】Postfix2.10+ssl+dovecot搭建邮件服务器
【实践分享】Linode VPS和Vultr VPS使用体检对比