Coder 2.37.7 常用 CLI 与运维命令详解

Coder 2.37.7 CLI 全量运维手册:服务与 systemd、用户与令牌、模板与 provisioner、工作区生命周期、组织许可、排障命令与 FAQ(2026-10-28 实测)。

Coder远程开发DevOps工程Ubuntu 22.042026/10/28

Coder 2.37.7 常用 CLI 与运维命令详解

目标:把日常运维要用的 coder 命令按场景串起来——认证、服务托管、用户令牌、模板、工作区、组织许可、排障。除标注「官方用法」外,本文命令与回显均来自 2026-10-27 至 2026-10-28 的实测环境(Coder v2.37.7+b40ba6e / Ubuntu 22.04 / PostgreSQL 16.15)。安装见《Ubuntu 22.04 安装 Coder 2.37.7 指南》,参数含义见《Coder 2.37.7 配置参数详解》。

一、环境信息

  • Coder 版本:Coder v2.37.7+b40ba6e Mon Oct 26 23:31:01 UTC 2026
  • CLI 位置:/opt/coder/coder,符号链接 /usr/local/bin/coder
  • 服务地址:http://192.168.1.71:3000
  • 管理员:admin / admin@coder.local
  • 全局配置目录:/root/.config/coderv2(--global-config / CODER_CONFIG_DIR)
  • 子命令数量:49 个(coder --help 实测)
  • 内置 provisioner:3 个,版本 v2.37.7+b40ba6e,状态 idle

二、工具概览

coder 既是服务端二进制,也是完整的运维 CLI。把 49 个子命令按用途归类:

类别子命令
服务端server(含 create-admin-user、dbcrypt、postgres-builtin-*)
认证login、logout、whoami、tokens、reset-password
用户与组织users、groups、organizations、licenses、features
模板templates(init/list/push/pull/delete/versions/archive/presets/edit)
编排provisioner(list/start/jobs/keys)
工作区create、list、show、start、stop、restart、update、delete、rename、schedule、autoupdate
接入ssh、port-forward、open、config-ssh、publickey
辅助dotfiles、favorite、unfavorite、stat、state、logs、ping、speedtest、netcheck
排障support bundle
其他notifications、oauth2-provider、ai-gateway、external-auth、external-workspaces、prebuilds、secret、completion、version

2.1 全局参数

全局参数对所有子命令生效,常用项:

参数环境变量说明
--urlCODER_URL目标部署地址
--tokenCODER_SESSION_TOKEN会话令牌,安全场景优先用环境变量
--global-configCODER_CONFIG_DIR配置目录,默认 /root/.config/coderv2
--use-keyringCODER_USE_KEYRING默认 true,用系统密钥环存令牌
--verbose / -vCODER_VERBOSE输出调试信息
--no-version-warningCODER_NO_VERSION_WARNING抑制客户端/服务端版本不一致告警
--debug-options无打印所有参数及来源后退出

三、认证与前置

3.1 登录

coder login http://192.168.1.71:3000

交互式输入邮箱与密码,成功后令牌写入系统密钥环(无密钥环时写入配置目录)。CI/脚本场景改用令牌:

export CODER_URL=http://192.168.1.71:3000
export CODER_SESSION_TOKEN=<令牌>
coder whoami

3.2 确认身份

coder whoami

输出会同时给出服务地址与当前用户名。脚本里建议只取用户名,避免地址变化影响判断。

3.3 登出

coder logout

该命令会二次确认(Are you sure you want to log out? (yes/no)),非交互环境会直接报 error: EOF。

四、服务进程与 systemd 运维

4.1 常用命令

systemctl start coder
systemctl stop coder
systemctl restart coder
systemctl is-active coder
systemctl status coder --no-pager
systemctl enable coder

实测 is-active 返回 active;status 显示 Loaded: loaded (/etc/systemd/system/coder.service; enabled)、Active: active (running)、Memory: 773.4M、CPU: 5.838s。

4.2 日志

journalctl -u coder -f
journalctl -u coder --since "30 min ago"
journalctl -u coder -p err

若在 env 文件中设置了 CODER_LOGGING_HUMAN=/dev/stdout,日志会进入 journald;否则默认写 /dev/stderr,同样能被 journald 捕获。JSON 日志则需另行采集。

4.3 健康检查

curl -s http://127.0.0.1:3000/healthz
# OK

ss -ltnp | grep 3000
# LISTEN 0  4096  *:3000  *:*  users:(("coder",pid=8362,fd=3))

/healthz 适合接入负载均衡与监控;/api/v2/buildinfo 可查看版本、agent API 版本与 provisioner API 版本(其中包含部署 ID 等信息,对外暴露前注意脱敏)。

4.4 优雅重启

systemctl restart coder
journalctl -u coder -n 20 --no-pager

单元中 KillSignal=SIGINT + TimeoutStopSec=90 会让 Coder 先等待未完成的 provisioner 任务收尾。实测重启日志会依次出现 coderd: gracefully shutdown、provisionerd-...: gracefully shutdown、pubsub is closing 等行,随后新进程打印 Started HTTP listener at http://0.0.0.0:3000。

4.5 创建管理员(数据库直连)

sudo -u coder sh -c '. /etc/coder.d/coder.env; /opt/coder/coder server create-admin-user \
  --username admin --email admin@coder.local --password "q1w2e3r4"'

该子命令绕过 Web 注册,直接把用户写入数据库并加入所有组织,是部署后第一次可登录的前提。

五、用户与令牌

5.1 用户列表与详情

coder users list

实测回显:

USERNAME  EMAIL              CREATED AT            STATUS
admin     admin@coder.local  2026-10-27T17:23:50Z  active
dev01     dev01@coder.local  2026-10-27T17:25:03Z  dormant

新建用户默认是 dormant(休眠)状态,需要激活后才能正常使用。

coder users show dev01
ID:             631512f4-47e3-4eca-a79c-7443dcd24c86
Username:       dev01
Full name:      Dev User
Email:          dev01@coder.local
Status:         dormant
Roles:          (none)
Organizations:  coder

5.2 新建用户

coder users create \
  --username dev01 \
  --email dev01@coder.local \
  --full-name "Dev User" \
  --password 'Q1w2e3r4!'

实测输出的关键行:

A new user has been created!
Your email is: dev01@coder.local
Your password is: Q1w2e3r4!

创建成功后状态仍是 dormant,需要 coder users activate dev01 并确认。

5.3 激活、暂停、删除

coder users activate dev01
coder users suspend dev01
coder users delete dev01

三个命令都是交互式确认:

> Are you sure you want to activate this user? (yes/no)
User dev01 has been activated!

非交互执行会得到 error: EOF。删除用户不支持 --yes(实测传 --yes 会报 unknown flag)。

5.4 修改角色

coder users edit-roles dev01 owner
coder users edit-roles dev01 member

角色变更影响工作区与模板的可见范围,生产环境应走审批。

5.5 令牌

coder tokens create --name lab-token
coder tokens list
coder tokens delete <令牌ID或值>

实测 tokens create 只输出一次令牌值,必须当场保存:

9JJGktKv0j-BxmTixO242PJHyEZtAZ0os

tokens list 只显示前 10 位、作用域、允许列表与过期时间:

ID          NAME       SCOPES     ALLOW LIST  LAST USED             EXPIRES AT            CREATED AT
9JJGktKv0j  lab-token  coder:all  *:*         1970-01-01T00:00:00Z  2026-10-28T17:25:03Z  2026-10-27T17:25:03Z

默认有效期为 168 小时(7 天),由服务端 --default-token-lifetime 控制。

5.6 重置密码(官方用法)

coder reset-password --postgres-url "postgres://coder:<密码>@127.0.0.1:5432/coder?sslmode=disable" <用户名>

该命令直接连数据库改密码,适合管理员被锁在外的情况;执行前确认连接串与备份。

六、模板与 provisioner

6.1 初始化模板

coder templates init

交互式选择官方示例模板,生成到当前目录。模板是标准 Terraform 工程,必须包含 coder Provider 与至少一个 coder_agent 资源。

6.2 推送模板

最小可推送模板(仅注入 agent,不创建计算资源,适合验证流程):

terraform {
  required_providers {
    coder = {
      source = "coder/coder"
    }
  }
}

data "coder_workspace" "me" {}

resource "coder_agent" "main" {
  os   = "linux"
  arch = "amd64"
}
cd /opt/templates/lab-template
coder templates push lab-template

实测推送后:

coder templates list
NAME          ORGANIZATION NAME  LAST UPDATED      USED BY
lab-template  coder              October 27, 2026  0 active developers

6.3 模板版本与删除

coder templates versions list lab-template
coder templates pull lab-template
coder templates archive lab-template
coder templates delete lab-template

删除实测回显:Deleted template lab-template at Oct 27 17:31:05。删除模板不会自动删除基于它创建的工作区,需先处理工作区。

6.4 provisioner

coder provisioner list
CREATED AT            LAST SEEN AT          KEY NAME  NAME            VERSION          STATUS  TAGS
2026-10-27T17:23:21Z  ...                   built-in  coder-node01-0  v2.37.7+b40ba6e  idle    map[owner: scope:organization]
2026-10-27T17:23:21Z  ...                   built-in  coder-node01-1  v2.37.7+b40ba6e  idle    map[owner: scope:organization]
2026-10-27T17:23:21Z  ...                   built-in  coder-node01-2  v2.37.7+b40ba6e  idle    map[owner: scope:organization]

三个内置守护进程对应 --provisioner-daemons 的默认值 3。任务长期排队时可增大该值,或按官方用法启动外部守护进程:

coder provisioner start --psk <预共享密钥> --tag scope=organization
coder provisioner jobs list
coder provisioner keys list

外部守护进程属于企业版能力 external_provisioner_daemons,社区版不可用。

七、工作区生命周期

7.1 创建

coder create demo-ws --template lab-template

实测输出(节选):

=== ✔ Initializing Terraform Directory [2211ms]
==> ⧗ Planning Infrastructure
2026-10-27 17:27:18.756Z coder_agent.main: Plan to create
2026-10-27 17:27:18.756Z Plan: 1 to add, 0 to change, 0 to destroy.
=== ✔ Planning Infrastructure [137ms]
==> ⧗ Starting workspace
2026-10-27 17:27:18.857Z Terraform 1.16.7
2026-10-27 17:27:18.913Z coder_agent.main: Creation complete after 0s
=== ✔ Starting workspace [270ms]

The demo-ws workspace has been created at Oct 27 17:27:19!

首次创建会下载 Terraform 与 Provider,耗时取决于网络;后续走缓存明显更快。

7.2 列表与详情

coder list
WORKSPACE        TEMPLATE      STATUS   HEALTHY  LAST BUILT  CURRENT VERSION  OUTDATED
admin/demo-ws    lab-template  Started  true     <1m         young_beahan12   false
coder show demo-ws
┌───────────────────────────────────────────┐
│ admin/demo-ws (running since 10s) lab-tem │
│ plate:young_beahan12                      │
├───────────────────────────────────────────┤
│ RESOURCE  STATUS  HEALTH  VERSION  ACCESS │
├───────────────────────────────────────────┤
└───────────────────────────────────────────┘

coder list --all 可查看所有用户的工作区。

7.3 启停与重启

coder stop demo-ws
coder start demo-ws
coder restart demo-ws

停止实测:

2026-10-27 17:27:28.830Z Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
=== ✔ Stopping workspace [289ms]

The demo-ws workspace has been stopped at Oct 27 17:27:29!

停止后列表状态变为 Stopped,HEALTHY 列为空。

7.4 更新与删除

coder update demo-ws
coder delete demo-ws

删除实测:

2026-10-27 17:31:04.785Z coder_agent.main: Destroying...
2026-10-27 17:31:04.786Z coder_agent.main: Destruction complete after 0s
=== ✔ Destroying workspace [250ms]

admin/demo-ws has been deleted at Oct 27 17:31:04!

coder delete 会真正执行 terraform destroy,工作区内的数据是否保留取决于模板的存储设计。

7.5 接入工作区

coder ssh demo-ws
coder ssh demo-ws -- ls -al
coder port-forward demo-ws --tcp 3000:3000
coder open demo-ws
coder config-ssh
coder publickey

config-ssh 会把工作区写入 ~/.ssh/config,之后可直接 ssh demo-ws.coder;publickey 输出用于 Git 操作的公钥。

7.6 定时与自动更新

coder schedule start demo-ws --at 09:00 --timezone Asia/Shanghai
coder schedule stop demo-ws --at 19:00 --timezone Asia/Shanghai
coder autoupdate demo-ws always

定时策略可降低闲置成本;模板频繁更新时 autoupdate 让工作区自动跟进。

八、组织、许可与特性

8.1 组织

coder organizations list
NAME   DISPLAY NAME  ID                                    DEFAULT
coder  Coder         f9391c36-96a8-4971-8293-f17fa02886b9  true

8.2 许可

coder licenses list
# No licenses found.

社区版无需许可;导入许可证后企业特性才会解锁。

8.3 特性

coder features list

实测输出 28 项,社区版全部为 not_entitled,例如:

NAME                          ENTITLEMENT   ENABLED  LIMIT  ACTUAL
access_control                not_entitled  false    <nil>  <nil>
audit_log                     not_entitled  false    <nil>  <nil>
external_provisioner_daemons  not_entitled  false    <nil>  <nil>
high_availability             not_entitled  false    <nil>  <nil>
multiple_organizations        not_entitled  false    <nil>  <nil>
scim                          not_entitled  false    <nil>  <nil>
template_rbac                 not_entitled  false    <nil>  <nil>
user_limit                    not_entitled  false    <nil>  0
workspace_proxy               not_entitled  false    <nil>  <nil>

8.4 分组

coder groups list

社区版实测报错:

error: Trace=[get groups: ]
Template RBAC is a Premium feature. Contact sales!

需要分组与模板级权限时,必须引入 Premium/Enterprise 授权。

九、排障命令

9.1 support bundle(官方用法)

coder support bundle

采集部署信息、工作区连接诊断与日志,生成压缩包供支持团队分析。命令会读取 ~/.config/coderv2 中的登录态,建议用管理员令牌执行;产物含环境信息,外发前先脱敏。

9.2 工作区日志

coder logs demo-ws
coder logs demo-ws --follow

查看 agent 与启动脚本输出,工作区启动失败时优先看这里。

9.3 网络诊断

coder ping demo-ws
coder netcheck
coder speedtest demo-ws
  • ping:测量到工作区的延迟与连接类型(直连/中继);
  • netcheck:打印 DERP 与 STUN 的探测结果,跨 NAT 不通时用它定位;
  • speedtest:上下行带宽测试,排查大文件同步慢的问题。

9.4 资源与状态

coder stat cpu
coder stat mem
coder state pull demo-ws

stat 读取当前工作区资源占用;state 用于手工修复 Terraform 状态损坏的工作区,操作前务必备份。

9.5 常见错误回显

# 数据库密码错误(重试 11 次后退出)
error: connect to postgres: connect to postgres: unable to connect after 11 tries; last error: pq: password authentication failed for user "coder"

# 端口被占用
error: configure http(s): listen tcp 127.0.0.1:3000: bind: address already in use

# access URL 缺少 scheme
error: access-url must include a scheme (e.g. 'http://' or 'https://)

十、升级、备份与回滚

10.1 备份

升级前先备份数据库:

sudo -u postgres pg_dump -Fc coder > /var/backups/coder-$(date +%F-%H%M).dump

同时备份 /etc/coder.d/(env 与 YAML)与 /var/cache/coder 中的必要缓存。

10.2 升级

# standalone
sh /root/install.sh --stable --version <新版本>
systemctl restart coder

# deb
curl -fL -o /tmp/coder_<新版本>_linux_amd64.deb \
  https://github.com/coder/coder/releases/download/v<新版本>/coder_<新版本>_linux_amd64.deb
dpkg -i /tmp/coder_<新版本>_linux_amd64.deb
systemctl restart coder

控制面启动时自动执行数据库迁移。迁移通常不可逆,回滚需要「旧二进制 + 升级前数据库备份」一起恢复。

10.3 回滚

systemctl stop coder
sudo -u postgres pg_restore -d coder --clean --if-exists /var/backups/coder-<时间>.dump
sh /root/install.sh --version <旧版本>
systemctl start coder

十一、FAQ

11.1 非交互执行确认类命令报 EOF

users suspend/activate/delete、logout 都有 (yes/no) 确认。脚本中可用管道输入:

echo yes | coder users activate dev01

或改用 API/令牌方式操作,避免依赖 TTY。

11.2 coder users delete --yes 报未知参数

实测 2.37.7 的 users delete 没有 --yes:

parsing flags ([users delete dev01 --yes]) for "coder users delete": unknown flag: --yes

改用交互确认或管道输入。

11.3 新建用户无法登录

先看状态。新建用户默认 dormant,需 coder users activate。若密码是小写组合,可能被密码策略拒绝;普通用户建议使用 Q1w2e3r4! 这类「大写+小写+数字+符号」口令。

11.4 groups list 报 Premium

分组与模板 RBAC 属于付费能力,社区版无法使用。评估需求时以 coder features list 为准。

11.5 features list 全是 not_entitled

社区版没有许可证,所有企业特性均未授权,属正常现象;user_limit 的 ACTUAL 为 0 也不代表不能用,只是没有配额限制。

11.6 provisioner list 只有 built-in

默认 3 个内置守护进程已够中小规模使用。需要隔离或扩容时启动外部守护进程,但那需要企业授权与 PSK 配置。

11.7 令牌丢了怎么办

tokens create 只在创建时回显一次。丢失后无法找回,只能 tokens delete 旧令牌再新建。生产环境把令牌存入密钥管理系统,不要写进脚本。

11.8 工作区卡在 queued

先看 coder provisioner list 是否全部 idle、coder provisioner jobs list 是否有失败任务,再看 journalctl -u coder 中 provisioner 的报错。常见原因是 Terraform Provider 下载失败或模板凭据过期。

11.9 客户端与服务端版本不一致

CLI 会提示版本不一致。测试环境可用 --no-version-warning 抑制;生产应保持 CLI 与服务端同版本,避免 API 行为差异。

十二、参考链接