在 docker run 创建并运行容器的时候, 可以通过 - p 指定端口映射规则. 但是, 我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改. 当 docker start 运行容器后并没有提供一个 - p 选项或设置, 让你修改指定端口映射规则. 那么这种情况我们该怎么处理呢? 今天 Docker 君教你如何修改运行中的 docker 容器的端口映射?
方法一: 删除原有容器, 重新建新容器
这个解决方案最为简单, 把原来的容器删掉, 重新建一个. 当然这次不要忘记加上端口映射.
优缺点: 优点是简单快捷, 在测试环境使用较多. 缺点是如果是数据库镜像, 那重新建一个又要重新配置一次, 就比较麻烦了.
方法二: 修改容器配置文件, 重启 docker 服务
容器的配置文件路径:
/var/lib/docker/containers/[hash_of_the_container]/hostconfig.JSON
其中的 hashofthecontainer 是 docker 镜像的 hash 值, 可以通过 docker ps 或者 docker inspect containername 查看.(CONTAINER ID 就可以看出来)
如上图, 文件中其中有一项是 PortBindings, 其中 8080/tcp 对应的是容器内部的 8080 端口, HostPort 对应的是映射到宿主机的端口 9190.8361/tcp 对应的是容器内部的 8361 端口, HostPort 对应的是映射到宿主机的端口 9191. 按需修改端口, 然后重启 docker 服务, 再启动容器服务就可以了.
systemctl restart docker
优缺点: 这个方法的优点是没有副作用, 操作简单. 缺点是先要停止 docker 容器, 然后重启整个 docker 服务, 如果在同一个宿主机上运行着多个容器服务的话, 就会影响其他容器服务.
方法三: 利用 docker commit 新构镜像
docker commit: 把一个容器的文件改动和配置信息 commit 到一个新的镜像. 这个在测试的时候会非常有用, 把容器所有的文件改动和配置信息导入成一个新的 docker 镜像, 然后用这个新的镜像重起一个容器, 这对之前的容器不会有任何影响.
1, 停止 docker 容器
docker stop container01
2,commit 该 docker 容器
docker commit container01 new_image:tag
3, 用前一步新生成的镜像重新起一个容器
docker run --name container02 -p 80:80 new_image:tag
优缺点: 这种方式的优点是不会影响统一宿主机上的其他容器, 缺点是管理起来显得比较乱, 没有第二种方法那么直观.
来源: http://www.bubuko.com/infodetail-3358617.html