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

我正在尝试创建一个行为像完整虚拟机的Docker容器。我知道我可以在Dockerfile中使用EXPOSE指令公开端口,并且可以使用-p标志docker run来分配端口,但是一旦容器实际运行,是否有命令打开/映射其他端口?

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


慕码人2483693
浏览 523回答 3
3回答

ABOUTYOU

这就是我要做的:提交活动容器。在端口打开的情况下,使用新映像再次运行容器(我建议安装共享卷并同时打开ssh端口)sudo docker ps&nbsp;sudo docker commit <containerid> <foo/live>sudo docker run -i -p 22 -p 8000:80 -m /data:/data -t <foo/live> /bin/bash

哔哔one

虽然您无法公开现有容器的新端口,但是您可以在同一Docker网络中启动一个新容器,并将其转发到原始容器。# docker run \&nbsp; --rm \&nbsp; -p $PORT:1234 \&nbsp; verb/socat \&nbsp; &nbsp; TCP-LISTEN:1234,fork \&nbsp; &nbsp; TCP-CONNECT:$TARGET_CONTAINER_IP:$TARGET_CONTAINER_PORT工作的例子启动一个侦听端口80的Web服务,但不公开其内部端口80(哎呀!):# docker run -ti mkodockx/docker-pastebin&nbsp; &nbsp;# Forgot to expose PORT 80!找到其Docker网络IP:# docker inspect 63256f72142a | grep IPAddress&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "IPAddress": "172.17.0.2",verb/socat在端口8080暴露的情况下启动,并使其将TCP流量转发到该IP的端口80:# docker run --rm -p 8080:1234 verb/socat TCP-LISTEN:1234,fork TCP-CONNECT:172.17.0.2:80现在,您可以访问http:// localhost:8080 /上的pastebin ,您的请求将socat:1234转发给pastebin:80,并将其转发到,并且响应的路径相反。
打开App,查看更多内容
随时随地看视频慕课网APP