通过端口转发实现docker容器运行时端口更改
- 前言
- 启动容器
- 查看容器ip地址
- 端口转发
前言
关于修改docker正在运行中容器端口,网上大部分分为3类: 1. 删除原有容器重新创建;2. 改配置文件;3. 在现有容器上新提交镜像,用新镜像起新的容器。 1和3属于同一种流派,抛弃现有容器,新起一个,2需要重启docker服务。3种方法都会对容器正在运行的服务或多或少有点影响。本文通过端口映射实现。
启动容器
我们以redis作为案例。在传统方法中我们启动redis并将其绑定到本地6379端口上可能是这样的
docker run --name redis01 -d -p 6379:6379 redis
然后我们本机6379就被docker监听来转发redis01容器的流量了
现在我们使用我们的nat+端口转发来不影响容器本身的情况下动态绑定至本机6380端口
正常启动一个redis容器
查看容器ip地址
使用命令docker network inspect bridge
查看这个容器ip地址.这个命令会显示docker默认的桥接网络中所有容器ip和它们的地址。 你用ip a 或ifconfig命令只能看到它的虚拟网关docker0,看不到容器具体的ip地址。拿到地址后,你顺着这个ip加端口是能够访问redis的(这一步在项目中调docker api会简洁许多 network inspect和使用container inspect都可以拿到容器ip地址,使用api操作的话推荐container inspect,用shell在终端操作看起来会比较麻烦)
或者使用 docker container inspect redis02 | grep IPAddress
端口转发
拿到容器ip过后就可以做端口转发,后续要换容器或本机映射的端口也只需改端口转发这一块不需要去动docker。 我们这里为了方便就用nginx做转发演示就行了
nginx 配置文件新增stream块,nginx 反向代理tcp配置,这个不清楚可以去自行google