菜单

Docker 部署

相关源文件

本文档介绍了如何使用 Docker 部署 code-server。内容涵盖了官方 Docker 镜像的架构、配置选项和使用模式。有关其他部署方法,请参阅安装与部署

1. Docker 镜像概述

code-server Docker 镜像提供了一个容器化环境,预装并配置了 code-server,以便在容器启动时运行。官方镜像基于 Debian 12,并包含 git、SSH 和各种编辑器等常用开发工具。

默认情况下,该容器在 8080 端口上暴露 code-server,并以名为“coder”的非 root 用户运行。

来源: ci/release-image/Dockerfile53-61 ci/release-image/entrypoint.sh1-27

2. 镜像架构

官方 Docker 镜像使用多阶段构建过程构建,从预先构建的 Debian 包安装 code-server。

镜像包含

  • 基础 Debian 12 系统
  • 常用开发工具 (git, git-lfs, curl, wget, ssh, sudo)
  • 文本编辑器 (nano, vim-tiny)
  • 系统工具 (htop, procps)
  • 一个拥有 sudo 权限的名为“coder”的非 root 用户
  • 用于处理用户权限的 fixuid
  • code-server 二进制文件

来源: ci/release-image/Dockerfile3-48

3. 基本用法

要使用 Docker 部署 code-server,请使用以下命令

此命令将

  • 将容器的 8080 端口映射到主机的 8080 端口
  • 将当前目录挂载到 /home/coder/project
  • 以当前用户身份运行,以避免权限问题
  • 使用最新的 code-server 镜像

运行此命令后,code-server 将在 http://:8080 访问。

4. 容器入口点

容器使用一个入口点脚本,该脚本负责

  1. 使用 fixuid 进行用户权限重映射
  2. 通过环境变量配置自定义用户名
  3. 执行用户提供的启动脚本
  4. 使用指定参数启动 code-server

来源: ci/release-image/entrypoint.sh1-27

5. 配置选项

5.1 环境变量

可变描述
PASSWORD设置 code-server 的密码
HASHED_PASSWORD设置 code-server 的加密密码
DOCKER_USER设置自定义用户名,而不是“coder”
ENTRYPOINTD启动脚本的目录路径(默认值:~/entrypoint.d)

5.2 卷挂载

常见的卷挂载包括

路径目的
/home/coder/project项目文件
/home/coder/.config/code-servercode-server 配置
/home/coder/.vscodeVS Code 配置和设置

5.3 用户配置

默认情况下,容器以“coder”用户(UID 1000)运行。您可以通过以下两种方式覆盖此设置:

  1. 使用 Docker run 的 -u 标志
  1. 使用 DOCKER_USER 环境变量

当设置了 DOCKER_USER 时,入口点脚本将修改现有“coder”用户以拥有指定的用户名。

来源: ci/release-image/entrypoint.sh8-19 ci/release-image/Dockerfile34-38

5.4 启动脚本

您可以将可执行文件放在 ENTRYPOINTD 目录中,从而在容器启动时执行自定义脚本。默认情况下,此目录设置为 /home/coder/entrypoint.d

入口点脚本将在启动 code-server 之前查找并执行此目录中的所有可执行文件。

来源: ci/release-image/entrypoint.sh21-25 ci/release-image/Dockerfile52

6. 高级用法

6.1 自定义 Docker 镜像

您可以基于官方镜像创建自定义 Docker 镜像

6.2 网络

为了让 code-server 能够代理到容器内运行的其他服务,您可能需要暴露额外的端口

这允许 code-server 代理容器内运行的 3000 端口服务的请求。

7. Docker Compose 示例

code-server 的典型 docker-compose.yml 文件可能如下所示

8. 安全注意事项

  1. 身份验证:当将 code-server 暴露到网络时,务必使用 PASSWORD 环境变量设置密码。

  2. 用户权限:使用 -u 标志以您的用户 ID 运行容器,以避免挂载卷的权限问题。

  3. HTTPS:对于生产部署,请使用带有 HTTPS 的反向代理来保护与 code-server 的连接。

  4. 容器隔离:请注意,code-server 默认在容器内以 sudo 权限运行。在生产环境中,请考虑限制这些权限。

9. 镜像详情

官方 Docker 镜像是 code-server 仓库中维护的,它使用多阶段构建过程将预构建的 Debian 包打包到 Docker 镜像中。

关键组件

  • 基础镜像: debian:12
  • 暴露端口: 8080
  • 默认用户: coder (UID 1000)
  • 工作目录: /home/coder
  • 入口点: /usr/bin/entrypoint.sh

来源: ci/release-image/Dockerfile3-61

10. 故障排除

权限问题

如果您遇到挂载卷的权限问题,请确保您使用适当的用户 ID 运行容器

容器未启动

检查容器日志以获取错误信息

常见问题包括端口冲突或配置问题。

无法访问 code-server

确保容器正在运行并且端口已正确映射

验证 code-server 是否在容器内监听 0.0.0.0(这是默认配置)。