在活动的Docker容器上公开端口

我正在尝试创建一个充当虚拟机的Docker容器。 我知道我可以使用暴露Dockerfile内部指令,露出一个端口,我可以使用-p标志与docker run到指定的端口,但是一旦一个容器实际运行时,有一个命令来打开/图附加端口生活?

例如,假设我有一个运行sshd的Docker容器。 其他人使用容器SSH并安装httpd。 有没有办法在容器上公开端口80并将其映射到主机上的端口8080,以便人们可以访问在容器中运行的Web服务器,而无需重新启动它?


你不能通过Docker来做到这一点,但你可以从主机访问容器的未公开端口。

如果你有一个在8000端口上运行的容器,你可以运行

wget http://container_ip:8000

要获取容器的IP地址,请运行2个命令:

docker ps

docker inspect container_name | grep IPAddress

在内部,当你运行一个镜像时,Docker会调用iptables来调用iptables,所以可能会有一些变化。

在本地主机端口8001上公开容器的端口8000:

 iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000

你可以用这种方法设置另一个容器,使用你想要的端口映射,然后比较iptables-save命令的输出(不过,我必须删除一些强制流量通过docker的选项代理)。

注意:这是颠覆码头工人,所以应该意识到它可能会造成蓝烟

要么

另一种方法是查看(新的?post 0.6.6?)-P选项 - 它将使用随机主机端口,然后将它们连接起来。

要么

与0.6.5,你可以使用LINKs功能来调出一个新的容器,与现有的容器交谈,还有一些额外的中继到该容器的-p标志? (我还没有使用LINK)

要么

与码头0.11? 您可以使用docker run --net host ..将容器直接附加到主机的网络接口(即,网络不是名称间隔的),因此您在容器中打开的所有端口都将暴露。


以下是我要做的事情:

  • 提交活动容器。
  • 再次使用新图像运行容器,打开端口(我建议安装共享卷并打开ssh端口)
  • sudo docker ps 
    sudo docker commit <containerid> <foo/live>
    sudo docker run -i -p 22 -p 8000:80 -m /data:/data -t <foo/live> /bin/bash
    

    这是另一个想法。 使用SSH进行端口转发; 当Docker主机是虚拟机时,这也有利于在OS X(也可能是Windows)中工作。

    docker exec -it <containterid> ssh -R5432:localhost:5432 <user>@<hostip>
    
    链接地址: http://www.djcxy.com/p/18183.html

    上一篇: Exposing a port on a live Docker container

    下一篇: passing kwargs with multiprocessing.pool.map