Merge pull request #29 from openqj/docker-runtime-prod

Production docker tasks: --docker-runtime runsc in autoscaler unit
This commit is contained in:
openqj authored and GitHub committed 2026-10-26 10:38:36 +08:00
commit 7c0e9366f8
2 files changed
+4 -2

No files matched your search

+3 -1
View File
@@ -500,7 +500,9 @@ interrupted 且终态任务 cancel 返回 400、心跳后 sweep 不扫刚心跳
`--docker-pids-limit`(默认 512,防 fork 炸弹);
`--docker-runtime`(不传 = docker 默认 runc;传 `runsc` =
任务容器走 gVisor syscall 沙箱,需 daemon 已注册该 runtime,
否则起容器失败;生产切换前须经一次性 worker 模型任务验证);
否则起容器失败;生产 autoscaler 已配 runsc:2026-10-26
一次性 worker 模型任务验证通过,60 秒 completed,
AppArmor docker-codex + 租户隔离 + egress 代理组合可用);
`--egress-proxy-port`(0 = 不启用;生产配 8888):启用后
Docker 任务容器的 HTTP(S) 出口全部走宿主上的 Tinyproxy
(见 `deploy/egress/`:FilterDefaultDeny 白名单,只放行
+1 -1
View File
@@ -14,7 +14,7 @@ EnvironmentFile=/etc/codex-app-server/env
# scaler 会按实例强制追加;--db 只给 scaler,scaler 会补给 worker。
# 注意:启用 autoscaler 后必须停掉静态 codex-cloud-worker,
# 否则两边同时派任务(scaler 只管理 autoscale-* 实例)。
ExecStart=/usr/bin/python3 -m cloud.autoscaler --db /var/lib/codex-app-server/control.db --interval 30 --min-workers 1 --max-workers 2 --per-worker-capacity 2 --scale-down-after 3 --drain-timeout 60 --state-file /var/lib/codex-app-server/autoscaler-state.json --log-dir /var/lib/codex-app-server/autoscaler-logs -- --interval 10 --config /opt/codex-app-server/host-config-docker.json --executor docker --docker-image codex-app-server:latest --docker-user 1003:1004 --docker-cpus 2 --docker-memory 2g --docker-extra-mounts /opt/codex-app-server/work:/app/work,/var/lib/codex-app-server/codex-home:/var/lib/codex-app-server/codex-home,/var/lib/codex-app-server/repos:/var/lib/codex-app-server/repos,/var/lib/codex-app-server/test-repo:/var/lib/codex-app-server/test-repo --repos-dir /var/lib/codex-app-server/repos --tenant-isolation --tenants-root /var/lib/codex-app-server/tenants --tenant-template-home /var/lib/codex-app-server/codex-home --tenant-template-repo /var/lib/codex-app-server/test-repo --docker-security-opt apparmor=docker-codex --docker-pids-limit 512 --egress-proxy-port 8888
ExecStart=/usr/bin/python3 -m cloud.autoscaler --db /var/lib/codex-app-server/control.db --interval 30 --min-workers 1 --max-workers 2 --per-worker-capacity 2 --scale-down-after 3 --drain-timeout 60 --state-file /var/lib/codex-app-server/autoscaler-state.json --log-dir /var/lib/codex-app-server/autoscaler-logs -- --interval 10 --config /opt/codex-app-server/host-config-docker.json --executor docker --docker-image codex-app-server:latest --docker-user 1003:1004 --docker-cpus 2 --docker-memory 2g --docker-extra-mounts /opt/codex-app-server/work:/app/work,/var/lib/codex-app-server/codex-home:/var/lib/codex-app-server/codex-home,/var/lib/codex-app-server/repos:/var/lib/codex-app-server/repos,/var/lib/codex-app-server/test-repo:/var/lib/codex-app-server/test-repo --repos-dir /var/lib/codex-app-server/repos --tenant-isolation --tenants-root /var/lib/codex-app-server/tenants --tenant-template-home /var/lib/codex-app-server/codex-home --tenant-template-repo /var/lib/codex-app-server/test-repo --docker-security-opt apparmor=docker-codex --docker-pids-limit 512 --egress-proxy-port 8888 --docker-runtime runsc
Restart=on-failure
RestartSec=10
# 停 scaler 时要等它把 worker 优雅排空(drain 60 秒 + 缓冲),