当前位置: 首页 > news >正文

使用iptables动态映射Docker容器端口

0x0. 安装telnet

telnet介绍:https://zh.wikipedia.org/wiki/Telnet

本文用于测试指定端口是否开放,命令如下:

telnet [ip] [port]

参数解释:

  • ip:ip地址
  • port:端口

如果指定端口开放则结果如下:

telnet

如果指定端口未开放则结果如下:

telnet

PS:可以通过快捷键ctrl+]退出连接,然后输入q退出telnet

0x1. 安装Docker

Docker官方安装文档:https://docs.docker.com/engine/install/

0x2. 实战

目标:开放js-redis容器的443端口

如下图所示,容器名称为js-redis,仅映射了6378 => 6379

dockerps

使用以下命令进行动态映射Docker容器的端口

iptables -t nat -A DOCKER -p tcp --dport ${宿主机端口} -j DNAT --to-dest ${容器ip}:${容器端口}
iptables -t nat -A POSTROUTING -p tcp -s ${容器ip} -d ${容器ip} -dport ${容器端口} -j MASQUERADE
iptables -A DOCKER -p tcp -d ${容器ip} --dport ${容器端口} -j ACCEPT

我们映射js-redis容器的8081 => 8082

iptables -t nat -A DOCKER -p tcp --dport 8081 -j DNAT --to-dest 172.18.0.4:8082
iptables -t nat -A POSTROUTING -p tcp -s 172.18.0.4 -d 172.18.0.4 -dport 8082 -j MASQUERADE
iptables -A DOCKER -p tcp -d 172.18.0.4 --dport 8888 -j ACCEPT

补充:

  1. iptables其他常用命令:
  • 列出Dcoker已设置的规则,带行号
iptables -t nat -vnL DOCKER --line-number
  • 根据行号删除规则
iptables -t nat -D DOCKER 3
  1. 查看容器ip命令
docker inspect [容器id或者容器名称] | grep IPAddress

在这里插入图片描述

0x3. 参考

  1. iptables
  2. Docker and iptables
  3. How do I assign a port mapping to an existing Docker container?

相关文章:

  • 低代码怎么用?三位一体发挥最大价值!
  • Libra论文阅读笔记-A unified congestion control framework for diverse application
  • Python代码优化工具——memory_profiler
  • LeetCode220831_92、滑动窗口最大值
  • 哈希碰撞概率计算
  • 2021年超全中高级Java工程师面试题+答案
  • 阿里新产MySQL性能优化实践笔记,GitHub已获千万推荐
  • yolov5篇---官方ultralytics / yolov5代码复现,训练自己的数据集
  • avalanche 配置dns解析域名
  • 【Wordpress】wordpress根据需要DIY配置(更新中)
  • 遥感影像分类任务的复现
  • springboot+vue实现登录案例(附VUE整个项目代码)
  • 如何使用LOTO示波器 绘制 频率响应特性曲线?
  • 智能科学与技术——介绍概要
  • Controller设计--Kafka从入门到精通(十五)
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • echarts花样作死的坑
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • js操作时间(持续更新)
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • React Native移动开发实战-3-实现页面间的数据传递
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • tab.js分享及浏览器兼容性问题汇总
  • Tornado学习笔记(1)
  • TypeScript实现数据结构(一)栈,队列,链表
  • Vim Clutch | 面向脚踏板编程……
  • VuePress 静态网站生成
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • windows-nginx-https-本地配置
  • 经典排序算法及其 Java 实现
  • 前端学习笔记之观察者模式
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (007)XHTML文档之标题——h1~h6
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • .bashrc在哪里,alias妙用
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net 发送邮件
  • .NET运行机制
  • .NET中winform传递参数至Url并获得返回值或文件
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [《百万宝贝》观后]To be or not to be?
  • [2016.7 day.5] T2
  • [20190401]关于semtimedop函数调用.txt
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [AIGC] Java 和 Kotlin 的区别
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [cogs2652]秘术「天文密葬法」
  • [ffmpeg] x264 配置参数解析