Docker入门系列7 动态映射端口port mapping
为何想要动态映射端口呢?
因为刚开始run启动容器时,并不知道里面需要映射哪些端口,等容器已创建了,想映射端口。
当然可以通过先commit成镜像,然后再次run时指定端口,但会生成中间的镜像,对于有轻微洁癖的我是不允许这种情况发生的。
我们可以对比映射前后iptables-save的变化(即没有加-p与加了-p选项后对比):
docker run -i -t --name test -p 8080:80 1f4fd79edf6d /bin/bash
iptables-save的结果
*nat -A DOCKER !-i docker0 -p tcp -m tcp --dport8080-j DNAT --to-destination 172.17.0.2:80*filter -A FORWARD -d 172.17.0.2/32!-i docker0 -o docker0 -p tcp -m tcp --dport80-j ACCEPT
通过“iptables -t table名 -L”查看:
filter表 Chain FORWARD ACCEPT tcp -- anywhere localhost tcp dpt:http nat表 Chain DOCKER DNAT tcp -- anywhere anywhere tcp dpt:webcache to:172.17.0.2:80
可以看到filter表的FORWARD链和nat表的DOCKER链各添加了一条规则。
受此启发,从而我们可以通过如下方法动态映射端口:
iptables -t nat -A DOCKER !-i docker0 -p tcp -m tcp --dport8080-j DNAT --to-destination 172.17.0.4:80 iptables -I FORWARD -d 172.17.0.4/32!-i docker0 -o docker0 -p tcp -m tcp --dport80-j ACCEPT
把“iptables -A FORWARD”改成“-I”放在第一条,用-A是添加到最后,用-I是放在最前面。
如果误操作了,可以通过如下方法删除:
iptables -t table名 -D chain名 rulenum [options]//rulenum 是规则的编号。从1 开始。可以使用--line-numbers 列出规则的编号 iptables -t nat -L--line-numbers iptables -t nat -D DOCKER 1
[编辑]艺搜参考
http://jar-c.blog.163.com/blog/static/116401250201061541150973/
http://stackoverflow.com/questions/19897743/exposing-a-port-on-a-live-docker-container
Docker入门系列7 动态映射端口port mapping的更多相关文章
- Docker入门系列(一):目标和安排
Docker入门系列(一) 这个系列的教程来源于docker的官方文档,此文档的目的在于一步一步学习docker的使用方法. 这一系列的教程有如下几篇文档: docker安装启动 构建第一个docke ...
- Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上
这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...
- ElasticSearch7.3 学习之定制动态映射(dynamic mapping)
1.dynamic mapping ElasticSearch中有一个非常重要的特性--动态映射,即索引文档前不需要创建索引.类型等信息,在索引的同时会自动完成索引.类型.映射的创建. 当ES在文档中 ...
- 解决docker容器启动时候无法映射端口的问题
当我们停止防火墙后,docker容器启动映射端口可能无法映射端口,这个时候需要重建docker0网桥. 详细的错误是这样的: docker: Error response from daemon: d ...
- Docker入门系列1:简介
可以实现快速部署. 比如一台 16 核 32G 内存的虚拟机上,需要跑 500+ 个用户的应用(每个应用的功能可以认为是一个网站 + 一系列的 RESTful API),有两个事情很重要: 资源隔离: ...
- Docker入门系列之五:15个 Docker 命令
在这篇文章中,我们将学习15个Dockers CLI命令.如果你还不了解Docker,请查看这个系列的其他部分进行学习,Docker概念,生态系统,Dockerfile,Docker镜像. Docke ...
- Docker入门系列4:命令行小结
百度Baidu App Engine(BAE)平台也是以Docker作为其PaaS云基础. 目的就是为了解决以下问题: 1) 环境管理复杂: 从各种OS到各种中间件再到各种App,一款产品能够成功发布 ...
- Docker入门系列3:使用
入门 首先强烈建议玩一遍官方的入门教程,Interactive commandline tutorial,下面是答案: 查看版本:docker version 搜索Image:docker searc ...
- Docker入门系列之一:什么是Docker?
原文作者:Jeff Hale 原文地址:https://towardsdatascience.com/learn-enough-docker-to-be-useful-b7ba70caeb4b 翻译: ...
随机推荐
- react dva 表单校验
import React,{ Component } from 'react'; import { connect } from 'dva'; import { WhiteSpace,NavBar , ...
- 使用git快捷方便的保存代码
大家都在使用git保存和备份代码,下面我们就来学习下吧. 一.本地安装和配置git 1.安装git pacman -S git //如果没有问题的话就可以安装成功了 2.验证 git --versio ...
- syslog/rsyslog的使用
syslogd是Linux下的一个记录日志文件服务.从结构来说,可以理解为这个服务下面有一系列的子服务,例如mail.auth.cron.kern等等,这些子服务对外提供日志记录的功能,而当其它的程序 ...
- 【剑指offer】数组中重复的数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...
- Java发送邮件----自己封装的方法
发送邮件的封装类: package com.email; import java.util.Properties; import javax.mail.Authenticator; import ja ...
- asp.net mvc 5 利用ActionFilterAttribute实现权限过滤
关于c#属性的教程:http://www.runoob.com/csharp/csharp-attribute.html 在asp.net mvc5中,可以利用ActionFilterAttribut ...
- 平衡树之非旋Treap
平衡树(二叉树) 线段树不支持插入or删除一个数于是平衡树产生了 常见平衡树:treap(比sbt慢,好写吧),SBT(快,比较好写,有些功能不支持),splay(特别慢,复杂度当做根号n来用,功能强 ...
- ie8 不能加载dll的问题解决
请问是在打开IE的时候提示无法加载DLL文件吗? 请尝试重置IE: 1. 关闭所有Internet Explorer窗口. 2. 单击开始,点击运行,输入inetcpl.cpl,按回车. 3. 点击高 ...
- mysql老司机之路
MYSQL数据库基础: 数据库帮我们解决以下数据存取难题: 较大数据量 事务控制 持久化和数据安全 高性能要求 高并发访问 关系型:mysql,oracle,sql server,postgresql ...
- DB11 TCP数据协议拆包接收主要方法
北京地标(DB11) 据接收器. /// <summary> /// DB11协议拆包器 /// </summary> public class SplictProtocol ...