在配置code-server的docker容器时,发现需要增加端口映射作开发用。docker容器在建立后就无法再通过-p
参数更改端口映射,更改端口映射的方法有使用docker commit
后重新docker run
、修改容器的hostconfig.json
等、使用pipework
等。本文记录利用docker network
和nginx来实现改变现有docker容器的端口映射的方法。
0x00 配置一个network
首先,建立一个新的网络:
docker network create my_network
然后将需要端口映射的容器code-server
连接到网络:
docker network connect my_network code-server
0x01 配置反代服务
要实现端口映射,我们需要一个反代服务连接到刚刚建立的网络。这里我使用了我比较熟悉的nginx。我需要暴露8081端口,通过传入-p
参数实现:
docker run -d --name nginx --network my_network -p 8081:8081 nginx
之后,在本地创建一个code-server.conf
文件,内容如下:
server
{
listen 8081;
location / {
proxy_pass http://code-server:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
其中,proxy_pass
字段,容器名:端口
是要转发的容器以及端口,listen
字段的端口是向外暴露的端口,需要与docker run
的-p
参数中指定的端口保持一致。
我这里转发的是http请求。因为使用nginx来进行反代,理论上这里可以实现nginx能完成的任何操作() 例如,我参考的文章也给出了一个代理非http服务的例子:
upstream my_service {
server my_existing_container:9000;
}
server {
listen 9000;
proxy_pass my_service;
}
之后,将配置文件复制到容器内部并重启nginx容器:
docker cp ./code-server.conf nginx:/etc/nginx/conf.d/my_conf.conf
docker restart nginx
0x02 修改端口映射
在需要修改端口映射时,只需重新创建一个nginx容器,然后重复上面的步骤。
参考链接: