Docker部署Code-server的两种方案

本文详细介绍两种在Docker中部署Code-server并打通Docker环境的方案:官方镜像手动安装Docker CLI与社区增强镜像自动集成Docker。通过docker-compose配置、环境变量设置、权限处理等步骤,帮助你快速搭建浏览器中的云端IDE,实现远程开发与容器管理。两种方案各有优劣,可根据需求选择。

作者:zhuge··预计阅读 37 分钟·8 阅读·0 评论
Docker部署Code-server的两种方案

前言

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}"       # 使用宿主机用户权限

⚠️ 注意UIDGID 需要替换为你实际的数值,可以通过 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 套接字

⚠️ 注意PUIDPGID 需要替换为你实际的 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-serverlscr.io/linuxserver/code-server
Docker CLI 安装手动 apt install环境变量自动安装
权限处理需手动配置 userPUID/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 界面中切换语言

  1. 进入 Code-server 界面
  2. Ctrl+Shift+P 打开命令面板
  3. 输入 Configure Display Language
  4. 选择 zh-cn(简体中文)
  5. 点击 Restart 重启 Code-server

💡 提示:如果列表中没有 zh-cn 选项,说明中文语言包未安装,请参考下一步。

3. 安装中文语言包扩展(如需要)

如果界面上没有中文选项,说明语言包扩展未安装:

  1. 进入 Code-server 界面
  2. 点击左侧扩展图标(或按 Ctrl+Shift+X
  3. 搜索 Chinese (Simplified) Language Pack
  4. 点击 Install 安装
  5. 安装完成后,重复步骤 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. 安装了中文包但界面仍是英文

  1. 确认 docker-compose.yml 中已添加 LANGLANGUAGELC_ALL 环境变量
  2. 在 Code-server 中按 Ctrl+Shift+PConfigure Display Language → 选择 zh-cn
  3. 如果列表中没有 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 容器和服务

参考链接

相关文章

评论

加载中...