查看原文
其他

Docker 为运行中容器映射端口

老李头 运维研习社 2022-11-05


        

       

使用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用法及原理。




往期精彩内容推荐

【环境配置】如何建立你的HTTPS站点

【开源技术】浅谈Rabbi    tmq

【环境配置】趣玩nginx——限速

【硬件配置】Matrix RAID

【运维开发】运维必备服务器分析shell

【nginx优化】使用socket方式链接Nginx优化php-fpm性能

【开源技术】Redis原理与实践浅析

【网络基础】CIsco设备基础配置

【运维安全】Clam AV——linux杀毒利器

【环境配置】Postfix2.10+ssl+dovecot搭建邮件服务器

【实践分享】Linode VPS和Vultr VPS使用体检对比

【开源技术】Jenkins系列——简介及安装

【开源技术】Jenkins系列——管理及配置

【开源技术】Jenkins系列——项目构建

【开源工具】GoAccess——Web日志分析利器

【开源技术】LVS无损硬盘替换

【运维安全】linux密钥登陆

【linux安全】linux系统之pam模块

【运维安全】SPF——防钓鱼及垃圾邮件技术详解






您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存