给现有docker容器添加端口映射的方法(使用docker network)

在配置code-server的docker容器时,发现需要增加端口映射作开发用。docker容器在建立后就无法再通过-p参数更改端口映射,更改端口映射的方法有使用docker commit后重新docker run、修改容器的hostconfig.json等、使用pipework等。本文记录利用docker network和nginx来实现改变现有docker容器的端口映射的方法。

然后将需要端口映射的容器code-server连接到网络:

要实现端口映射,我们需要一个反代服务连接到刚刚建立的网络。这里我使用了我比较熟悉的nginx。我需要暴露8081端口,通过传入-p参数实现:

之后,在本地创建一个code-server.conf文件,内容如下:

其中,proxy_pass字段,容器名:端口是要转发的容器以及端口,listen字段的端口是向外暴露的端口,需要与docker run的-p参数中指定的端口保持一致。

我这里转发的是http请求。因为使用nginx来进行反代,理论上这里可以实现nginx能完成的任何操作() 例如,我参考的文章也给出了一个代理非http服务的例子:

之后,将配置文件复制到容器内部并重启nginx容器:

在需要修改端口映射时,只需重新创建一个nginx容器,然后重复上面的步骤。