我不确定我是否误解了这里的某些内容,但似乎只能通过从映像创建新容器来设置端口映射。是否有办法将端口映射分配到现有的Docker容器?
当前回答
我对这个问题也很感兴趣。
正如@Thasmo提到的,端口转发只能通过docker run(和docker create)命令指定。 其他命令,docker start没有-p选项,docker port只显示当前转发。
要添加端口转发,我总是遵循以下步骤,
停止运行容器 Docker停止test01 提交容器 Docker提交test01 test02 注意:上面的test02是我从test01容器构建的一个新映像。 从已提交的映像重新运行 Docker运行-p 8080:8080 -td test02
其中第一个8080是本地端口,第二个8080是集装箱端口。
其他回答
我们可以使用方便的工具,如SSH来轻松完成这一任务。
我使用ubuntu主机和基于docker镜像的ubuntu。
在docker内部安装了openssh-client。 外部docker(主机)安装了openssh-server服务器。
当需要绘制一个新端口时,
在docker中运行以下命令
ssh -R8888:localhost:8888 <username>@172.17.0.1
其中“172.17.0.1”为docker接口的IP (你可以通过跑步得到这个 Ifconfig docker0 | grep "inet addr" | cut -f2 -d":" | cut -f1 -d" " on the host)。
在这里,我有本地8888端口映射回主机8888。您可以根据需要更改端口。
如果您还需要一个端口,您可以终止ssh,并使用新端口向其添加多一行-R。
我已经用netcat测试过了。
不确定是否可以应用端口映射运行的容器。您可以在运行容器时应用端口转发,这与创建新容器不同。
$ docker run -p <public_port>:<private_port> -d <image>
将开始运行容器。本教程解释端口重定向。
使用实例在Docker Desktop下修改容器的HostPort(适用于Windows 10 / MacOS)
# list all containers
$ docker ps -a
$ docker stop docker101tutorial
# Use grep to get id of container
$ docker inspect docker101tutorial | grep -i id
"Id": "sha256:fff0a4b22d6f3d2eb8d2748b8a8bbc9967ea87199988acee8e86ac70bce9c3eb",
# run plain ubuntu docker image with shell and change it's namespace to docker host
# https://stackoverflow.com/questions/60408574/how-to-access-var-lib-docker-in-windows-10-docker-desktop/60411313#60411313
# https://forums.docker.com/t/the-location-of-images-in-docker-for-windows/19647/4
$ docker run -it --privileged --pid=host ubuntu nsenter -t 1 -m -u -i sh
# We want to find out the directory of docker101tutorial container. We are looking for:
# `"Image":"sha256:fff0a4b22d6f3d2eb8d2748b8a8bbc9967ea87199988acee8e86ac70bce9c3eb"`
# in /var/lib/docker/containers/*/config.v2.json
$ find /var/lib/docker/containers/ -name config.v2.json -exec grep -H fff0a4b22d {} \;
/var/lib/docker/containers/c1eda20b30f058bce9f8ece3b47a21641df5b399770e12ab57416a954d3c8bbf/config.v2.json
# edit it
$ vi /var/lib/docker/containers/c1eda20b30f058bce9f8ece3b47a21641df5b399770e12ab57416a954d3c8bbf/hostconfig.json
按i键插入模式。 修改"HostPort":"80"为"HostPort":"8092" 按“退出”键,输入:wq。按回车。 现在不启动/停止docker101tutorial。否则,对HostPort的修改将被恢复。 右键单击Docker桌面托盘图标,然后单击“重新启动”。 在Docker Desktop的容器列表中,查看您的容器。显示的端口应该变为8092。 启动容器。现在它将被映射到主机上的端口8092。
基于@holdfenytolvaj的答案。
对于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)?
- 守护进程的错误响应:已被集装箱使用"
- 如何找到可用的端口?