为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2019-11-04 14:59:22
我正在尝试创建一个行为像完整虚拟机的Docker容器。我知道我可以在Dockerfile中使用EXPOSE指令公开端口,并且可以使用-p标志docker run来分配端口,但是一旦容器实际运行,是否有命令打开/映射其他端口?例如,假设我有一个运行sshd的Docker容器。有人使用ssh容器安装了httpd。有没有办法公开容器上的端口80并将其映射到主机上的端口8080,以便人们可以访问容器中运行的Web服务器,而无需重新启动它?
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

这就是我要做的:


提交活动容器。

在端口打开的情况下,使用新映像再次运行容器(我建议安装共享卷并同时打开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


查看完整回答
反对 回复 2019-11-04
?
哔哔one

TA贡献1854条经验 获得超8个赞

虽然您无法公开现有容器的新端口,但是您可以在同一Docker网络中启动一个新容器,并将其转发到原始容器。


# docker run \

  --rm \

  -p $PORT:1234 \

  verb/socat \

    TCP-LISTEN:1234,fork \

    TCP-CONNECT:$TARGET_CONTAINER_IP:$TARGET_CONTAINER_PORT

工作的例子

启动一个侦听端口80的Web服务,但不公开其内部端口80(哎呀!):


# docker run -ti mkodockx/docker-pastebin   # Forgot to expose PORT 80!

找到其Docker网络IP:


# docker inspect 63256f72142a | grep IPAddress

                    "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,并将其转发到,并且响应的路径相反。


查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 520 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信