映射Docker容器内服务端口提供外部服务
在使用Docker快速部署不同版本CentOS容器后,就可以在容器中部署服务。例如,部署Django REST framework,然后就需要将容器内部的服务端口映射成host主机的对外IP上的端口,以便能够通过外部访问。
在容器内部启动Django服务,注意,启动Django服务时需要监听所有端口,所以要添加
0.0.0.0:8000
参数
使用docker内建的运行命令实现端口映射
docker容器在运行时就提供了端口映射功能:
举例
如果要将已经部署的容器端口映射出去,可以先制作镜像快照,然后再次启动,在启动时传递端口
实际操作记录:
通过
dev5
创建了镜像local:dev5_django
,然后删除掉容器,再用镜像启动新的容器实现端口映射创建了卷
share-data
共享给容器使用 - 详细清参考Docker卷
以下iptables操作未实践成功,仅供参考
使用iptables实现端口映射
注意
:不建议使用iptables来实现端口映射,虽然在docker早期版本可能可以实现,但是在近期的高版本中可能不能正常工作。并且docker创建容器可能会动态分配不同的IP地址,导致端口映射失败。
在host主机上需要先测试一下是否能够访问容器中的django服务端口,可以采用
telnet 172.17.0.5 8000
注意:默认的docker网络是NAT模式,连接在
docker0
这个虚拟交换机上
通过将容器中端口输出到host主机上,可以提供对外服务。这个步骤是通过iptables
实现:
检查容器
my_container
的IP地址
先检查my_container
容器是否在运行中
检查容器的IP地址是通过docker inspect
指令
这里可以看到该容器的IP地址是
172.17.0.5
,现在要将该容器中运行的django
服务端口8000
映射到host主机上
host主机:添加映射规则
nat
这个iptables
链表是Docker安装后默认添加
如果要删除这条添加的规则,则将-A DOCKER
改成-D DOCKER
执行就可以,即执行sudo iptables -t nat -D DOCKER -p tcp --dport 8005 -j DNAT --to-destination 172.17.0.5:8000
host主机:添加外部访问host主机的端口允许(默认在host主机上启用的防火墙屏蔽了外部访问)
删除规则
sudo iptables -D INPUT -p tcp --dport 8005 -j ACCEPT
如果要持久化保存
参考
Last updated