在活动的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 ..
将容器直接附加到主机的网络接口(即,网络不是名称间隔的),因此您在容器中打开的所有端口都将暴露。
以下是我要做的事情:
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