在你的浏览器中使用VS Code
code-server 是一个可以在远程服务器上运行 VS Code 的工具,允许从web端使用VS Code。本文将介绍如使用 docker 安装 code-server 。
Run VS Code on any machine anywhere and access it in the browser.

亮点
- 在任何(安装了浏览器的)设备上编写具有一致开发环境的代码
- 使用云服务器加速测试、编译、下载等
- 在旅途中保持电池寿命;所有密集型任务都在您的服务器上运行
要求
需要一台可以运行code-server的机器。您可以使用现有的物理机,也可以使用云服务器,推荐腾讯云Lighthouse,稳定好用。最低要求:
- 1 GB 内存
- 2个CPU核心
可以使用任何 Linux 发行版,但本文档假定您使用的是在 腾讯云Lighthouse 托管的 Debian 11。
环境必须启用 WebSockets,因为 code-server 使用 WebSockets 在浏览器和服务器之间进行通信(后面在介绍如何使用域名访问时,会讲到如何在 nginx 反向代理开启 WebSockets )。
安装docker
卸载旧版本
Docker的旧版本被称为docker,docker.io或docker-engine。如果已安装,需要先卸载:
1 | apt remove docker docker-engine docker.io containerd runc |
安装方式
可以根据需要以不同的方式安装 Docker Engine:
大多数用户设置Docker的存储库并从中安装,以便于安装和升级任务。这是推荐的方法,
- 一些用户下载DEB软件包并手动安装,并完全手动管理升级。这在一些情况下很有用,比如在没有互联网接入的气隙系统上安装Docker。
- 在测试和开发环境中,一些用户选择使用自动便捷脚本来安装Docker。
本文将介绍如何从Docker的存储库安装 Docker Engine。
设置存储库
- 更新apt软件包索引并安装软件包,以允许apt通过HTTPS使用存储库:
1 | apt update |
1 | apt install \ |
- 添加Docker的官方GPG密钥:
1 | curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg |
- 使用以下命令设置稳定版的存储库。要添加nightly或test存储库,请在下面的命令中的单词stable之后添加nightly或test(或两者)。
1 | echo \ |
安装Docker Engine
更新 apt 包管理器索引,安装最新版的 docker-ce、docker-ce-cli 和 containerd.io:
1 | apt update |
1 | apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin |
验证docker安装
通过运行hello world映像,验证Docker引擎是否已正确安装。
1 | $ docker run hello-world |
看到以下输出则说明安装已完成:
1 | root@debian[15:10:13]{~}docker run hello-world |
此命令下载测试映像并在容器中运行。当容器运行时,它打印一条消息并退出。
运行code-server容器
之前的步骤已经让我们成功在 Debian 上安装了 Docker,现在,我们只需要拉取code-server的官方镜像然后在本地运行就可以了:
1 | $ docker run -itd --name code-server -p 127.0.0.1:8080:8080 codercom/code-server:latest |
以上命令将在宿主机拉取最新code-server镜像,启动一个 code-server 容器,并把主机8080端口映射到容器8080。写作本文时最新版本是4.3.0,但由于我从4.2.0升级之后遇到了点小问题,所以建议不安装latest:
1 | $ docker run -itd --name code-server -p 127.0.0.1:8080:8080 codercom/code-server:4.2.0 |
可选参数:
-v "$HOME/.config:/home/coder/.config"//能够直接在宿主机直接修改容器内 coder-server 的配置文件,添加此参数前需要确保已在当前用户home目录下创建.config目录,使用mkdir -p ~/.config
-v "$PWD:/home/coder/project" //将当前目录复制到容器/home/coder/project目录下
看到以下回显,证明容器成功运行啦:
1 | [root@debian ~/compose-2]# docker run -itd --name code-server-test -p 127.0.0.1:8080:8080 codercom/code-server:4.2.0 |
使用ss -ntl命令,能够看到本地8080端口已有进程在监听。再curl请求一下本地8080端口,看到重定向,说明容器内的code-server服务也已经正常运行啦。
1 | [root@debian ~/compose-2]# curl 127.0.0.1:8080 |
使用nginx反向代理
这是code-server的私有化部署,登录code-server也需要使用密码的,所以我们先配置域名解析和https,没有域名的话可以先注册,然后申请 ssl 证书,这里有免费的证书可以申请。nginx中添加如下配置:
1 | server { |
这里推荐一个工具,一个SSL 配置生成器,选择好服务器软件、系统环境和希望的配置兼容程度,即可自动生成配置。但此时访问会出现问题,原因是 code-server 使用 WebSockets 在浏览器和服务器之间进行通信,因此我们还需要修改一下配置。
添加 websocket 支持
在以上配置文件中加入:
1 | proxy_set_header Upgrade $http_upgrade; |
WebSocket 和 HTTP 协议不同,但是 WebSocket 中的握手和 HTTP 中的握手兼容,它使用 HTTP 中的 Upgrade 协议头将连接从 HTTP 升级到 WebSocket,当客户端发过来一个 Connection: Upgrade 请求头时,Nginx 是不知道的,所以,当 Nginx 代理服务器拦截到一个客户端发来的 Upgrade 请求时,需要显式来设置 Connection 、Upgrade 头信息,并使用 101(交换协议)返回响应,在客户端和代理服务器、后端服务器之间建立隧道来支持 WebSocket。
在使用的过程中发现经常有断连的现象,不影响使用,但每次断连都会弹出一个窗口然后消失,很难受。查看控制台发现1006错误,搜索了发现是nginx代理的原因,利用nginx代理websocket的时候,客户端和服务器握手成功后,如果在60s时间内没有数据交互,连接就会自动断开。继续添加如下配置即可。
1 | proxy_read_timeout 86400s; |
访问code-server
以上步骤都正确完成后就可以通过https加域名来访问code-server啦:

根据提示,我们输入以下命令获取密码:
1 | $ docker exec -it code-server-test cat /home/coder/.config/code-server/config.yaml |
这里的code-server-test是容器名,看到以下结果:
1 | [root@debian ~/compose-2]# docker exec -it code-server-test cat /home/coder/.config/code-server/config.yaml |
输入密码即可登录:

之后就可以开启你的个性化之旅啦~


