docker容器启动后添加端口映射

 更新时间:2018年06月22日 14:29:50   作者:患恐高症的小鸟  
这篇文章主要介绍了docker容器启动后添加端口映射,,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

概要

网上有许多人在查找关于容器启动后能否进行端口映射的问题。我曾经也问过度娘,很遗憾我没找到。本文就这个问题给出一个解决方法,旨在抛砖引玉。本文的思路是使用iptables的端口转发,这也是docker端口映射内部的实现机制,只不过我是显示地写出来罢了,为的就是让查找这个问题的人对docker的端口映射有一个直观的了解。

结论:容器启动后是可以添加端口映射的,但不建议手工添加,最好使用docker提供的功能。

步骤

创建两个容器并进行了端口映射,结果如图所示:

假如,我start一个容器,其内部IP为172.17.0.5,并在容器内部启动了80端口。

FORWARD规则链我们不用管它,docker已经帮我们写好了,我们只需要关心NAT中的几条链即可。

查看NAT表中的PREROUTING链

从上面可以看出,iptables将满足条件的数据都转发到了DOCKER链上去了。

查看NAT表中的DOCKER链

仿照上图,我们添加一条自己的映射规则,将宿主的8082端口映射到172.17.0.5的80端口上去,规则如下:

iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 8082 -j DNAT --to-destination 172.17.0.5:80

查看NAT表中的POSTROUTING链

仿照上图中的规则,书写的规则如下:

iptables -t nat -A POSTROUTING -s 172.17.0.5/32 -d 172.17.0.5/32 -p tcp -m tcp --dport 80 -j MASQUERADE

查看FILTER表中的DOCKER链

仿照上图书写规则如下:

 iptables -t filter -A DOCKER -d 172.17.0.5/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT

结果

虽然IP为172.17.0.5的容器没有开启端口映射,如下图所示:

但我们依然能够通过访问宿主机(192.168.78.238)的8082端口来访问172.17.0.5的80端口,效果如下:

使用此方法有一个缺点,不能访问localhost:8082,也就是说如果想对localhost也进行转发,需要进行额外的配置。

结论

建议大家不要像我这样去做端口映射,我这么做只是为了阐述标题。

如果大家在容器中添加了一些东西,并开启了端口,同时呢,又想多复制几个这样的容器。建议大家把容器提交成镜像,然后使用docker提供的端口映射功能。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Docker如何安装Oracle 19c

    Docker如何安装Oracle 19c

    这篇文章主要介绍了Docker如何安装Oracle 19c问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Docker中运行nginx并挂载本地目录到镜像中的方法

    Docker中运行nginx并挂载本地目录到镜像中的方法

    这篇文章主要介绍了Docker中运行nginx并挂载本地目录到镜像中的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 如何完全清理你的Docker数据

    如何完全清理你的Docker数据

    Docker 不会对你的系统进行任何配置更改……但是它会占用大量的磁盘空间,那么如何完全清理你的数据,本文就详细的来介绍一下,感兴趣的可以了解一下
    2021-07-07
  • Docker安装Jenkins-2.249.3-1.1的详细过程

    Docker安装Jenkins-2.249.3-1.1的详细过程

    这篇文章主要介绍了Docker安装Jenkins-2.249.3-1.1,通过编写docke安装脚本来实现安装目的,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • 利用Docker-compose安装redis的简单步骤

    利用Docker-compose安装redis的简单步骤

    Docker-compose是Docker官方推出的一个工具软件,可以管理多个Docker容器组成的一个应用,下面这篇文章主要给大家介绍了关于利用Docker-compose安装redis的简单步骤,需要的朋友可以参考下
    2024-03-03
  • Docker中的数据存放位置

    Docker中的数据存放位置

    这篇文章主要介绍了Docker中的数据存放位置,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Docker离线部署geoserver的思路详解

    Docker离线部署geoserver的思路详解

    这篇文章主要介绍了Docker离线部署geoserver的思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • docker安装Elasticsearch7.6集群并设置密码的方法步骤

    docker安装Elasticsearch7.6集群并设置密码的方法步骤

    本文主要介绍了docker安装Elasticsearch7.6集群并设置密码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • docker镜像的拉取登陆上传及保存等相关使用命令

    docker镜像的拉取登陆上传及保存等相关使用命令

    这篇文章主要为大家介绍了docker镜像的拉取登陆上传及保存等相关使用命令,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 解决docker与vmware的冲突问题

    解决docker与vmware的冲突问题

    这篇文章主要介绍了解决docker与vmware的冲突问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03

最新评论