我不确定我是否误解了这里的某些内容,但似乎只能通过从映像创建新容器来设置端口映射。是否有办法将端口映射分配到现有的Docker容器?
当前回答
在Fujimoto Youichi的例子中,test01是一个容器,而test02是一个图像。
在运行docker之前,你可以删除原来的容器,然后重新给容器分配相同的名称:
$ docker stop container01
$ docker commit container01 image01
$ docker rm container01
$ docker run -d -P --name container01 image01
(使用-P将端口暴露给随机端口,而不是手动分配)。
其他回答
不确定是否可以应用端口映射运行的容器。您可以在运行容器时应用端口转发,这与创建新容器不同。
$ docker run -p <public_port>:<private_port> -d <image>
将开始运行容器。本教程解释端口重定向。
我的容器有这样的情况:
127.0.0.1:8050->8000
我用一个iptalbes规则解决了这个问题
iptables -t nat -I DOCKER 1 -p tcp --dport ${HOST_PORT} -j DNAT --to-destination ${CONTAINER_IP}:${CONTAINER_PORT}
在本例中,HOST_PORT为8050,CONTAINER_PORT为8000。使用docker inspect命令查找CONTAINER_IP。
要删除iptables规则,使用以下命令:
iptables -t nat -D DOCKER 1
对于Windows和Mac用户,还有另一种非常简单友好的方法来更改映射端口:
下载kitematic 进入容器的“设置”页面,在“端口”页签中,可以直接在那里修改已发布的端口。 再次启动容器
在Fujimoto Youichi的例子中,test01是一个容器,而test02是一个图像。
在运行docker之前,你可以删除原来的容器,然后重新给容器分配相同的名称:
$ docker stop container01
$ docker commit container01 image01
$ docker rm container01
$ docker run -d -P --name container01 image01
(使用-P将端口暴露给随机端口,而不是手动分配)。
如果“现有”指的是“正在运行”,那么(目前)不可能添加端口映射。
然而,如果你需要在一个运行的容器中公开一个服务,而不需要停止/重新启动它,你可以动态地添加一个新的网络接口,例如管道。
推荐文章
- E: gnupg, gnupg2和gnupg1似乎没有安装,但是这个操作需要其中一个
- 无法启动IIS Express Web服务器,注册URL失败,访问被拒绝
- 如何从docker更改默认docker注册表。IO到我的私人注册表?
- Docker- compose无法连接到Docker Daemon
- 单个命令停止和删除docker容器
- 使用GPU从docker容器?
- 如何使用本地映像作为dockerfile的基本映像?
- 谁能解释一下docker.sock
- 多重from是什么意思
- 通过映像名称停止Docker容器- Ubuntu
- 如果dockerfile的名称不是dockerfile,我如何构建一个dockerfile ?
- 我可以在/etc/hosts中映射主机名*和端口*吗?
- 如何修改Play执行run命令时使用的默认端口(9000)?
- 守护进程的错误响应:已被集装箱使用"
- 如何找到可用的端口?