docker--修改容器的映射端口
前戏
如果我们启动了一个容器,并且将宿主机的端口和容器的端口映射上了。有时候我们需要更改宿主机的端口或者要添加映射端口。这里提供三种方案
新建容器
这个解决方案最为简单,把原来的容器删掉,重新建一个。当然这次不要忘记加上端口映射。例如下面的 rabbitmq 容器,映射了三个端口到宿主机上
docker run -id --name rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ -p 15692:15692 \ -v /opt/rabbitmq/data:/var/lib/rabbitmq \ -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest \ rabbitmq:3.8.3-management
修改容器配置文件
修改配置文件的话,需要停止 docker 服务
systemctl stop docker
容器的配置文件路径:cd /var/lib/docker/containers/{容器id}/hostconfig.json
我们进入到 243f14b67efbd5b841fed1f6d820f6f47370c17f251ecf3b95b89f5e255483f3/ 目录里面,这个容器就是上面的 rabbitmq 容器
打开 hostconfig.json 文件,内容如下
文件中其中有一项是 PortBindings,其中 15672/tcp 对应的是容器内部的 15672 端口,HostPort 对应的是映射到宿主机的端口 15672。5672/tcp 对应的是容器内部的 5672 端口,HostPort 对应的是映射到宿主机的端口 5672。按需修改端口
然后在修改 config.v2.json 文件
如果没有ExposedPorts 在 config.v2.json 里面添加一个配置项 "ExposedPorts":{"80/tcp":{}} , 将这个配置项添加到 "Tty": true, 前面,如果有就添加 "80/tcp":{} 端口即可。
注意:80 为实际容器需要映射的端口
然后重启docker服务,再启动容器服务就可以了
systemctl restart docker
优缺点:这个方法的优点是没有副作用,操作简单。缺点是需要重启整个docker服务,如果在同一个宿主机上运行着多个容器服务的话,就会影响其他容器服务。
利用docker commit新构镜像
docker commit:把一个容器的文件改动和配置信息 commit 到一个新的镜像。这个在测试的时候会非常有用,把容器所有的文件改动和配置信息导入成一个新的 docker 镜像,然后用这个新的镜像重起一个容器,这对之前的容器不会有任何影响。
docker stop container01 # 停止docker容器 docker commit container01 new_image:tag # commit该docker容器 docker run --name container02 -p 80:80 new_image:tag #用前一步新生成的镜像重新起一个容器
优缺点:这种方式的优点是不会影响统一宿主机上的其他容器,缺点是管理起来显得比较乱,没有第二种方法那么直观。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2020-06-27 python--if,while,break,continue