我不确定我是否误解了这里的某些内容,但似乎只能通过从映像创建新容器来设置端口映射。是否有办法将端口映射分配到现有的Docker容器?
当前回答
如果“现有”指的是“正在运行”,那么(目前)不可能添加端口映射。
然而,如果你需要在一个运行的容器中公开一个服务,而不需要停止/重新启动它,你可以动态地添加一个新的网络接口,例如管道。
其他回答
在Fujimoto Youichi的例子中,test01是一个容器,而test02是一个图像。
在运行docker之前,你可以删除原来的容器,然后重新给容器分配相同的名称:
$ docker stop container01
$ docker commit container01 image01
$ docker rm container01
$ docker run -d -P --name container01 image01
(使用-P将端口暴露给随机端口,而不是手动分配)。
对于Windows和Mac用户,还有另一种非常简单友好的方法来更改映射端口:
下载kitematic 进入容器的“设置”页面,在“端口”页签中,可以直接在那里修改已发布的端口。 再次启动容器
如何将端口映射分配到现有的Docker容器?
这很简单。有两件事,一个是本地服务器端口,如800,8080等在你的机器上,第二个是你的容器端口,你想映射。Docker端口映射
docker run -p 8080:8080 <Image ID>
要获得图像Id,您可以使用
docker ps
使用实例在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的答案。
停止docker引擎和容器。 进入/var/lib/docker/containers/${container_id}目录,编辑hostconfig.json 编辑PortBindings。HostPort您想要更改。 启动码头引擎和容器。
推荐文章
- 试图连接到https://index.docker.io时,网络超时
- 为每个Docker图像查找图层和图层大小
- 如何避免在为Python项目构建Docker映像时重新安装包?
- 有效地测试Linux上的端口是否打开?
- 如何用docker-compose更新现有图像?
- 如何在构建docker期间设置环境变量
- 拉访问拒绝存储库不存在或可能需要docker登录
- 如何在ENTRYPOINT数组中使用Docker环境变量?
- Docker:容器不断地重新启动
- Mac/OS X上的/var/lib/docker在哪里
- 如何用docker-compose标记docker图像
- 从环境文件中读入环境变量
- 禁用特定RUN命令的缓存
- 从Docker容器获取环境变量
- E: gnupg, gnupg2和gnupg1似乎没有安装,但是这个操作需要其中一个