2016年7月26日星期二

在不重启动容器的情况下,允许从外部访问到容器内部的端口

有时启动了容器,花了好久才启动完成(例如有的db启动要花几分钟分析巨大数据文件),忽然想起来,忘了加-p port:port选项,无法从Docker主机外访问容器里的端口了。在不退出容器的情况下,找了几个方法。

目前的docker,还没有实现好热备份,一旦退出容器,即使commit到image里再启动那个image,也只不过省了文件状态恢复的时间,却不会省下db启动时分析巨大的数据文件所需的时间。
所以有必要,在不退出容器的情况下,设法让人通过访问Docker主机的某个port来访问到容器里面的某个port。目前有两个方法:
  • 在Docker主机里用iptables加个端口转发规则。
    sudo iptables -A PREROUTING -t nat -p tcp --dport Docker主机port -j DNAT --to 容器ip:容器port
    
  • 如果是在用VirtualBox里的docker-machine做Docker主机,那么还有一个方法是物理主机上加上个路由使得能够直接访问到容器的ip。
    sudo route -n add 容器ip/32 Docker主机ip
    
    这时Docker主机ip是指docker-machine ip default的结果。这样一来,可以直接访问容器ip:容器port了。

没有评论:

发表评论