前言
Code-server 是一个可以在浏览器中运行的 VS Code,它让你随时随地通过浏览器进行代码开发。但很多时候,我们不仅需要写代码,还需要在开发环境中构建 Docker 镜像、启动容器、编排服务。
本文将介绍两种在 Docker 中部署 Code-server 并打通 Docker 环境的方案:
| 方案 | 镜像 | 特点 | 适用场景 |
|---|---|---|---|
| 方案一 | codercom/code-server | 官方纯净镜像,需手动安装 Docker CLI | 追求官方纯净、完全可控 |
| 方案二 | lscr.io/linuxserver/code-server | 社区增强镜像,自动集成 Docker | 追求快速部署、省心省力 |
两种方案最终都能实现「浏览器中的云端 IDE + 完整的 Docker 运维能力」。你可以根据自己的偏好选择。
核心原理
无论哪种方案,要让 Code-server 容器拥有 Docker 管理能力,核心思路是将宿主机的 Docker 环境"传递"给 Code-server 容器。这通过两个关键操作实现:
| 操作 | 作用 |
|---|---|
挂载 /var/run/docker.sock | 让容器内进程能与宿主机的 Docker 守护进程通信 |
使用 network_mode: host | 让容器内启动的服务端口直接暴露在宿主机上 |
简单来说,Code-server 容器就像是宿主机的 Docker 的"远程遥控器"。
方案一:官方镜像 + 手动安装 Docker CLI
此方案使用 codercom/code-server 官方镜像,启动后手动安装 Docker CLI,适合追求官方纯净、希望完全控制安装过程的用户。
1.1 准备工作
创建项目目录:
mkdir ~/code-server-official && cd ~/code-server-official
1.2 创建 docker-compose.yml
version: "3.9"
services:
code-server:
image: codercom/code-server:latest
container_name: code-server-official
restart: unless-stopped
network_mode: host # 使用宿主机网络
environment:
# === Code-server 基础配置 ===
- PASSWORD=your_secure_password # 访问密码(务必修改!)
# === 中文语言环境 ===
- LANG=zh_CN.UTF-8
- LANGUAGE=zh_CN:zh
- LC_ALL=zh_CN.UTF-8
volumes:
- ./project:/home/coder/project # 代码存放目录
- ./config:/home/coder/.config # Code-server 配置目录
- /var/run/docker.sock:/var/run/docker.sock # 挂载 Docker 套接字
user: "${UID:-1000}:${GID:-1000}" # 使用宿主机用户权限
⚠️ 注意:
UID和GID需要替换为你实际的数值,可以通过id命令查看。PASSWORD务必修改为强密码。
1.3 启动 Code-server
docker compose up -d
1.4 进入容器安装 Docker CLI
由于官方镜像没有预装 Docker,需要进入容器手动安装:
# 进入容器
docker exec -it code-server-official /bin/bash
# 在容器内执行以下命令
sudo apt-get update
sudo apt-get install -y docker.io
# 验证安装
docker --version
# 退出容器
exit
💡 提示:你也可以在容器内安装
docker-compose(如果宿主机没有或想独立使用):sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
1.5 验证部署
查看日志确认启动成功:
docker compose logs -f
期望输出:
code-server-official | [2026-07-13T00:58:00.000Z] info Server listening on http://0.0.0.0:8080
code-server-official | [2026-07-13T00:58:00.000Z] info - Using password from environment variable
浏览器访问 http://你的服务器IP:8080,输入密码即可进入 Code-server 界面。
方案二:社区增强镜像 + 自动集成 Docker
此方案使用 lscr.io/linuxserver/code-server 镜像,通过环境变量 DOCKER_MODS 自动安装 Docker CLI,实现开箱即用,适合追求快速部署的用户。
2.1 准备工作
创建项目目录:
mkdir ~/code-server-linuxserver && cd ~/code-server-linuxserver
2.2 创建 docker-compose.yml
version: "3.9"
services:
code-server:
image: lscr.io/linuxserver/code-server:latest
container_name: code-server-lsio
restart: unless-stopped
network_mode: host # 使用宿主机网络
environment:
# === Code-server 基础配置 ===
- PASSWORD=your_secure_password # 访问密码(务必修改!)
- PUID=1000 # 你的 UID
- PGID=1000 # 你的 GID
- TZ=Asia/Shanghai
# === 中文语言环境 ===
- LANG=zh_CN.UTF-8
- LANGUAGE=zh_CN:zh
- LC_ALL=zh_CN.UTF-8
# === Docker 支持(自动安装 Docker CLI) ===
- DOCKER_MODS=linuxserver/mods:universal-docker
volumes:
- ./project:/config/workspace # 代码存放目录
- ./config:/config # Code-server 配置目录
- /var/run/docker.sock:/var/run/docker.sock # 挂载 Docker 套接字
⚠️ 注意:
PUID和PGID需要替换为你实际的 UID/GID,可以通过id命令查看。
2.3 启动 Code-server
docker compose up -d
2.4 验证部署
查看日志确认启动成功:
docker compose logs -f
期望输出:
code-server-lsio | [2026-07-13T00:58:00.000Z] info Server listening on http://0.0.0.0:8080
code-server-lsio | [2026-07-13T00:58:00.000Z] info - Using password from environment variable
同时可以看到 Docker CLI 自动安装的日志:
code-server-lsio | [mod-init] Running Docker modification...
code-server-lsio | [mod-init] Docker CLI installed successfully.
浏览器访问 http://你的服务器IP:8080,输入密码即可进入 Code-server 界面。
两种方案对比
| 对比项 | 方案一:官方镜像 | 方案二:社区增强镜像 |
|---|---|---|
| 镜像 | codercom/code-server | lscr.io/linuxserver/code-server |
| Docker CLI 安装 | 手动 apt install | 环境变量自动安装 |
| 权限处理 | 需手动配置 user | PUID/PGID 自动处理 |
| 中文配置 | 需手动安装语言包扩展 | 环境变量 + 界面切换 |
| 配置复杂度 | 中等 | 低 |
| 灵活性 | 高,完全可控 | 中,基于社区镜像 |
| 启动速度 | 快(但需额外安装) | 稍慢(自动安装 mod) |
| 适用场景 | 追求官方纯净、完全可控 | 追求快速部署、省心省力 |
通用配置:中文界面
两种方案部署成功后,Code-server 默认界面为英文。通过以下步骤切换为中文:
1. 确认环境变量已设置
检查容器内的语言环境变量是否生效:
# 方案一
docker exec -it code-server-official env | grep -E "LANG|LANGUAGE|LC_ALL"
# 方案二
docker exec -it code-server-lsio env | grep -E "LANG|LANGUAGE|LC_ALL"
期望输出:
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
LC_ALL=zh_CN.UTF-8
2. 在 Code-server 界面中切换语言
- 进入 Code-server 界面
- 按
Ctrl+Shift+P打开命令面板 - 输入
Configure Display Language - 选择
zh-cn(简体中文) - 点击 Restart 重启 Code-server
💡 提示:如果列表中没有
zh-cn选项,说明中文语言包未安装,请参考下一步。
3. 安装中文语言包扩展(如需要)
如果界面上没有中文选项,说明语言包扩展未安装:
- 进入 Code-server 界面
- 点击左侧扩展图标(或按
Ctrl+Shift+X) - 搜索
Chinese (Simplified) Language Pack - 点击 Install 安装
- 安装完成后,重复步骤 2 切换语言
通用配置:常见权限问题排查
问题现象
启动时出现以下错误:
code-server | error EACCES: permission denied, mkdir '/home/coder/.config/code-server'
原因分析
容器内用户没有权限写入宿主机挂载的配置目录。
解决方案
方法一:删除旧目录,让容器重新创建
# 方案一
docker compose -f ~/code-server-official/docker-compose.yml down
sudo rm -rf ~/code-server-official/config
docker compose -f ~/code-server-official/docker-compose.yml up -d
# 方案二
docker compose -f ~/code-server-linuxserver/docker-compose.yml down
sudo rm -rf ~/code-server-linuxserver/config
docker compose -f ~/code-server-linuxserver/docker-compose.yml up -d
方法二:修复目录权限
# 方案一
sudo chown -R $USER:$USER ~/code-server-official/config
# 方案二
sudo chown -R $USER:$USER ~/code-server-linuxserver/config
方法三:确认 UID/GID 与实际一致
id
# 输出示例:uid=1000(zhu) gid=1000(zhu)
确保 docker-compose.yml 中的 PUID/PGID(方案二)或 user(方案一)与上面输出的数值一致。
通用功能:在 Code-server 中使用 Docker
无论哪种方案,进入 Code-server 后,打开终端(Terminal),你就可以像在宿主机上一样使用 Docker 命令了。
1. 验证 Docker 是否可用
docker --version
docker ps
2. 构建并运行一个 Nginx 容器
# 创建测试项目
mkdir -p ~/project/nginx-test
cd ~/project/nginx-test
# 创建 Dockerfile
cat > Dockerfile <<'EOF'
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
EOF
# 创建 index.html
echo "<h1>Hello from Code-server!</h1>" > index.html
# 构建镜像
docker build -t my-nginx .
# 启动容器(端口映射到宿主机)
docker run -d -p 8888:80 --name my-nginx my-nginx
现在在宿主机浏览器访问 http://你的服务器IP:8888,就能看到效果了。
3. 使用 Docker Compose 启动项目
cd /config/workspace
mkdir node-app && cd node-app
# 创建 docker-compose.yml
cat > docker-compose.yml <<'EOF'
version: '3.9'
services:
node-app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
EOF
# 创建 Dockerfile
cat > Dockerfile <<'EOF'
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
EOF
# 创建 package.json
echo '{"name":"node-app","scripts":{"start":"node server.js"},"dependencies":{"express":"^4.18.2"}}' > package.json
# 创建 server.js
echo 'const express=require("express");const app=express();app.get("/",(req,res)=>res.send("Hello from Node.js!"));app.listen(3000,()=>console.log("Server running on port 3000"));' > server.js
# 启动
docker compose up -d
访问 http://你的服务器IP:3000 即可看到结果。
网络模式说明
由于 Code-server 使用了 network_mode: host,它内部启动的服务可以直接暴露在宿主机网络上:
| 启动方式 | 能否从宿主机直接访问 | 示例 |
|---|---|---|
docker run -p 8888:80 | ✅ 可以 | http://宿主机IP:8888 |
docker run --network host | ✅ 可以 | http://宿主机IP:应用端口 |
docker compose 中定义 ports | ✅ 可以 | http://宿主机IP:映射端口 |
docker run 不加端口映射 | ❌ 不可以 | 只能容器内部访问 |
常用管理命令
# 查看 Code-server 日志
docker compose -f ~/code-server-official/docker-compose.yml logs -f
docker compose -f ~/code-server-linuxserver/docker-compose.yml logs -f
# 进入容器终端
docker exec -it code-server-official /bin/bash
docker exec -it code-server-lsio /bin/bash
# 重启 Code-server
docker compose -f ~/code-server-official/docker-compose.yml restart
docker compose -f ~/code-server-linuxserver/docker-compose.yml restart
# 停止 Code-server
docker compose -f ~/code-server-official/docker-compose.yml down
docker compose -f ~/code-server-linuxserver/docker-compose.yml down
# 更新镜像
docker compose -f ~/code-server-official/docker-compose.yml pull
docker compose -f ~/code-server-official/docker-compose.yml up -d
安全建议
| 注意事项 | 说明 |
|---|---|
| 设置强密码 | PASSWORD 不要使用弱密码,建议使用随机字符串 |
| 使用 HTTPS | 生产环境建议配合 Nginx 反向代理启用 HTTPS |
| 网络隔离 | 如果服务器有公网 IP,建议限制 8080 端口的访问来源 |
| 权限控制 | 访问 Docker 套接字等同于 root 权限,谨慎管理密码 |
常见问题汇总
1. 登录时提示 "Please log in below. Password was set from $PASSWORD"
输入你在 docker-compose.yml 中设置的 PASSWORD 值即可登录。如果忘记密码,修改 docker-compose.yml 中的 PASSWORD 并重启容器。
2. 安装了中文包但界面仍是英文
- 确认
docker-compose.yml中已添加LANG、LANGUAGE、LC_ALL环境变量 - 在 Code-server 中按
Ctrl+Shift+P→Configure Display Language→ 选择zh-cn - 如果列表中没有
zh-cn,先安装Chinese (Simplified) Language Pack扩展
3. 方案一:容器内无法执行 docker 命令
确认已挂载 /var/run/docker.sock:/var/run/docker.sock,并已进入容器安装 Docker CLI:
docker exec -it code-server-official /bin/bash
sudo apt-get update && sudo apt-get install -y docker.io
4. 方案二:容器内无法执行 docker 命令
检查 DOCKER_MODS=linuxserver/mods:universal-docker 是否正确配置,查看日志确认 mod 是否成功安装:
docker compose logs | grep -i mod
5. Code-server 启动后立即退出
检查日志 docker compose logs,通常是因为 ./config 目录权限问题,参考权限排查章节。
总结
通过本文,你获得了两种在 Docker 中部署 Code-server 并打通 Docker 环境的方案:
| 功能 | 方案一:官方镜像 | 方案二:社区镜像 |
|---|---|---|
| 浏览器可访问的云端 VS Code | ✅ | ✅ |
| 中文界面 | ✅ | ✅ |
| 直接执行 Docker 命令 | ✅ | ✅ |
| 构建和推送 Docker 镜像 | ✅ | ✅ |
| 启动容器并让宿主机直接访问 | ✅ | ✅ |
| 运行 Docker Compose 编排项目 | ✅ | ✅ |
| 开箱即用 | ❌ 需手动安装 | ✅ |
| 官方纯净 | ✅ | ❌ |
选择建议:
- 如果你喜欢官方纯净镜像,不介意多敲几行命令,选择方案一
- 如果你追求快速部署、省心省力,选择方案二
无论哪种方案,这套环境都非常适合:
- 远程开发:随时随地通过浏览器写代码
- 容器化项目:在开发环境中直接构建和测试镜像
- 团队协作:提供统一的云端开发环境
- 轻量运维:通过浏览器管理 Docker 容器和服务

评论