我不确定我是否误解了这里的某些内容,但似乎只能通过从映像创建新容器来设置端口映射。是否有办法将端口映射分配到现有的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引擎和容器。 进入/var/lib/docker/containers/${container_id}目录,编辑hostconfig.json 编辑PortBindings。HostPort您想要更改。 启动码头引擎和容器。
不确定是否可以应用端口映射运行的容器。您可以在运行容器时应用端口转发,这与创建新容器不同。
$ docker run -p <public_port>:<private_port> -d <image>
将开始运行容器。本教程解释端口重定向。
如果你运行docker run <NAME>,它将生成一个新映像,这很可能不是你想要的。
如果你想改变当前的图像,请执行以下操作:
Docker ps a
获取目标容器的id,然后转到:
cd /var/lib/docker/containers/<conainerID><and then some:)>
停止容器:
docker stop <NAME>
更改文件
vi config.v2.json
"Config": {
....
"ExposedPorts": {
"80/tcp": {},
"8888/tcp": {}
},
....
},
"NetworkSettings": {
....
"Ports": {
"80/tcp": [
{
"HostIp": "",
"HostPort": "80"
}
],
然后更改文件
vi hostconfig.json
"PortBindings": {
"80/tcp": [
{
"HostIp": "",
"HostPort": "80"
}
],
"8888/tcp": [
{
"HostIp": "",
"HostPort": "8888"
}
]
}
重新启动docker,它应该可以工作。
可以通过直接编辑hostconfig修改端口映射。Json文件 /var/lib/docker/containers/ hash_of_the_container / hostconfig。/var/snap/docker/common/var-lib-docker/containers/[hash_of_the_container]/hostconfig. Json或/var/snap/docker/common/var-lib-docker/containers/[hash_of_the_container]/hostconfig. Json。如果你安装Docker作为一个snap. json,我相信。
你可以通过docker inspect <container_name>命令来确定[hash_of_the_container],“Id”字段的值就是哈希值。
停止容器(docker Stop <container_name>)。 停止docker服务(根据Tacsiazuma的评论) 修改文件。 重新启动docker引擎(刷新/清除配置缓存)。 启动容器(docker Start <container_name>)。
所以你不需要用这种方法创建一个图像。您还可以在这里更改重启标志。
附注:您可以访问https://docs.docker.com/engine/admin/了解如何根据您的主机正确重新启动docker引擎。我使用sudo systemctl restart docker重新启动在Ubuntu 16.04上运行的docker引擎。
推荐文章
- 我如何找到哪个程序正在使用端口80在Windows?
- 试图连接到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容器获取环境变量