尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Docker Desktop 安装器 -5,Codex 不走官方通道,走 TaoToken 行不行

Docker Desktop 安装器 -5,Codex 不走官方通道,走 TaoToken 行不行 双击D:\docker_install里那个 Docker Desktop Installer 4.70.0.exe进度条刚过半就退出窗口一闪而过日志里只留一句退出码-5。我没急着重装而是把这段报错丢给 Codex让它先判断这是签名、权限还是 WSL 的问题。默认通道下回答偏泛安装器参数、系统 Build、WSL 状态经常被混着讲于是我把 Codex 接到了 TaoToken先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建一把 Key再把 Base URL 指向兼容通道让它逐条对照-5和 WSL 启用失败的日志。下面记录的就是这台 Windows 11 Build 26200 机器从安装器报错到 4.87.0 装成再到 PostgreSQL 12.22 加 pgAdmin 4 容器跑起来的过程。1. 4.70.0 安装器退出码 -5日志里只有一行1.1 现场Windows 11 Build 26200 上安装器走一半就退先把环境摆清楚。Windows 11 家庭版 64 位Build 26200i7-13650HX约 32 GB 内存D 盘剩 260 GB 左右5432和5050都没被占用。机器上没装过 Docker也没装过 PostgreSQL 和 pgAdminwsl命令存在但组件没装完整。安装包放在D:\docker_install数字签名有效签名者是 Docker Inc文件哈希也对得上可双击安装就是返回-5。这个退出码本身不告诉你哪里错了它只是安装器提前结束的标记。可能的来源有很多权限提升流程、安装器参数、WSL 后端组件状态、安装包与当前系统 Build 的兼容性甚至磁盘路径里的空格都可能参与。单看这一行日志人容易原地打转反复双击同一个安装包结果每次都停在同一个位置。我把安装日志目录翻了一遍通常在%LOCALAPPDATA%\Docker和%TEMP%下具体文件名随版本变化别照抄别人的路径。日志的最后几行停在准备 WSL 后端的阶段于是排查重心从安装包本身转到 WSL 这一层。这个转向很关键Docker Desktop 在家庭版上用 Linux 容器底座就是 WSL 2底座没搭好安装器给什么参数都可能半路退出。1.2 先修底座wsl --install 返回 1 之后改用 dism 两条命令以管理员身份打开 PowerShell开始菜单搜 PowerShell右键选“以管理员身份运行”UAC 弹窗点“是”。先执行微软推荐的快速安装wsl --install --no-distribution这条命令只装 WSL 组件不额外拉 Ubuntu 之类的发行版Docker Desktop 会自己管理内部 Linux 环境。这台机器执行后返回退出码1快速安装没完成。遇到这种情况不要反复敲同一条命令改用手动启用功能的方式dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart两条命令都返回了3010。这个码不是失败它的含义是“操作成功需要重启才能生效”。所以看到 3010 不要慌保存手上工作正常重启电脑即可。重启之后重新用管理员身份开 PowerShell再按顺序执行wsl --update wsl --set-default-version 2 wsl --version wsl --status预期结果是能看到 WSL 版本号和内核版本默认版本显示为 2。如果wsl --update长时间卡在0.0%可以换下载方式再试一次wsl --update --web-download到这一步安装器报-5的第一层原因基本清楚WSL 组件先前没启用完整dism返回 3010 说明组件装上了但要重启重启前安装器拿不到可用的 WSL 2 后端尝试安装 Docker Desktop 时就会提前退出。WSL 状态正常之后再去处理安装器本身的权限模式。2. 在 Codex 里换成 TaoToken 通道~/.codex/config.toml 改 model_provider2.1 先拿 Key在官网创建 API Key要让 Codex 帮忙看长日志得先解决通道问题。默认通道在遇到“安装器 系统 Build WSL 日志”这种上下文很长的提问时容易只抓住前半段回答或者给一堆通用建议。换到自己可控的接口通道之后模型选型和调用记录都在自己手里贴多少日志也更从容。打开 TaoToken注册登录后进控制台创建 API Key复制出来的那串就是下面配置里的YOUR_API_KEY。同一个页面里还能看到模型广场待会儿config.toml要填的模型 ID 以那里当时的列表为准不要凭记忆写一个带日期后缀的名字。2.2 config.toml 里把 base_url 指向 https://taotoken.net/apiCodex 的配置文件在C:\Users\你的用户名\.codex\config.toml没有就新建一个。核心是让model_provider指向一个自定义供应商并把base_url写成 TaoToken 的接口地址model YOUR_MODEL_ID model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEYmodel换成模型广场里你实际能调用的那个 IDenv_key告诉 Codex 去哪个环境变量里读 Key名字保持TAOTOKEN_API_KEY就行。这里要注意不要照搬 Claude Code 那套ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN变量名Codex 不认这一套写进去只会让配置看起来改了、实际仍走默认通道。接口地址末尾也不要加/v1多这一截请求路径就变了。2.3 让 Codex 读到 Key环境变量与终端重启Key 放环境变量里当前 PowerShell 窗口临时生效可以这样$env:TAOTOKEN_API_KEY YOUR_API_KEY想以后每次开终端都自动带上用setx写用户级变量setx TAOTOKEN_API_KEY YOUR_API_KEYsetx写完之后已经打开的终端读不到新值必须关掉重开。如果你的 Codex 版本把凭据存在~/.codex/auth.json把同一把 Key 放进去也可以字段名以你本地版本为准不用强行改成别的格式。改完重启 Codex先问一个跟 Docker 无关的小问题看它能不能正常回答确认通道是通的再往对话里贴安装器日志。顺序反了的话一旦报错你分不清是 Key 没读到还是日志太长。3. 把 -5 和 WSL 日志交给 Codex它解释我在 PowerShell 执行3.1 提问时把退出码、签名、目录、系统 Build 一起贴进去单独问一句“安装 Docker 返回 -5 怎么办”任何模型都只能给通用答案。我的做法是把上下文一次给全安装包版本、存放路径、签名状态、系统 Build、磁盘剩余空间、两条dism命令的返回码、wsl --status的输出再加上安装器日志最后十几行。可以照这个模板组织安装 Docker Desktop 4.70.0 安装包返回退出码 -5。 系统Windows 11 家庭版 64 位 Build 26200 安装包D:\docker_install\Docker Desktop Installer.exe 数字签名有效签名者 Docker Inc WSL 状态wsl --install --no-distribution 返回 1 已用 dism 启用 Microsoft-Windows-Subsystem-Linux 和 VirtualMachinePlatform返回 3010 重启后 wsl --version 正常默认版本 2。 安装器日志最后几行粘贴原文 请给出 -5 的可能来源并说明每一种该怎么验证 只输出要在 PowerShell 里执行的命令和判断依据不要假设已经执行成功。最后一句很重要它把 Codex 的角色限制在“解释和给命令”。AI 编程工具没法替你点 UAC 弹窗也没法直接操作你这台 Windows 机器上的安装器真正执行命令、看返回码的仍然是你本人。把这一条写进提问里回答会明显更贴近实际。3.2 Codex 给出的三条假设与逐条验证按上面的模板问Codex 通常会把问题拆成三条线索。第一条是 WSL 组件启用了但没重启生效3010正是这个意思它会让你先确认重启已经完成再执行wsl --status看默认版本是否为 2。第二条是安装模式问题全用户安装、UAC 提权、自定义程序目录这三件事叠在一起时安装器在 Build 26200 上可能提前退出并返回-5。第三条是安装包版本与当前系统 Build 的兼容性建议换新版本再试。我逐条验证。重启后 WSL 状态正常第一条排除第二条没法直接证明只能换参数做对照实验第三条用新安装包验证。这里能看出排障的正确用法模型给的是假设和验证顺序不是替你下结论。你把每条假设的验证结果贴回去它再缩窄范围这样几轮下来就收敛到具体参数而不是把安装包反复删了又下。3.3 真正生效的是“当前用户安装”这组参数最后成功的是用 4.87.0 安装包走当前用户安装模式。在普通 PowerShell 里执行不是管理员窗口$installer D:\docker_install\Docker Desktop Installer 4.87.0.exe Start-Process -FilePath $installer -Wait -ArgumentList ( install, --user, --backendwsl-2, --wsl-default-data-rootD:\docker_install\data, --no-windows-containers )--user按当前用户安装绕开这台机器上全用户安装触发的-5--backendwsl-2指定 WSL 2 后端--wsl-default-data-root把虚拟磁盘、镜像和容器数据放到 D 盘C 盘不会越用越满--no-windows-containers只保留 Linux 容器需要的组件。装完从开始菜单打开 Docker Desktop第一次启动会弹订阅协议这个必须自己点接受脚本不能代你同意。验证三条命令docker version docker compose version docker info能打出 Docker Desktop 版本、Engine 版本并且docker info里 Server 的 OSType 显示为 linux说明 WSL 2 后端在正常工作。如果提示找不到docker先关掉 PowerShell 重新开让 PATH 更新还不行就重启一次。4. 装成 4.87.0 之后PostgreSQL 12.22 与 pgAdmin 4 的 compose 路径4.1 项目目录、compose.yaml 与 .envDocker 能跑之后才是原本想做的事用容器起 PostgreSQL 12 学习环境和 pgAdmin 4。建目录D:\docker_install\postgresql12-lab里面放compose.yaml、.env、servers.json再建一个backup目录给备份用。镜像写死版本不用latestservices: postgres: image: postgres:12.22-bookworm container_name: postgresql12-db restart: unless-stopped env_file: .env environment: POSTGRES_DB: study_db POSTGRES_USER: postgres ports: - 127.0.0.1:5432:5432 volumes: - postgres_data:/var/lib/postgresql/data - ./backup:/backup healthcheck: test: [CMD-SHELL, pg_isready -U postgres -d study_db] interval: 10s timeout: 5s retries: 5 pgadmin: image: dpage/pgadmin4:9.17 container_name: postgresql12-pgadmin restart: unless-stopped env_file: .env environment: PGADMIN_DEFAULT_EMAIL: adminexample.com ports: - 127.0.0.1:5050:80 volumes: - pgadmin_data:/var/lib/pgadmin - ./servers.json:/pgadmin4/servers.json:ro depends_on: postgres: condition: service_healthy volumes: postgres_data: pgadmin_data:.env只放两个初始化密码POSTGRES_PASSWORD123456 PGADMIN_DEFAULT_PASSWORD123456这两个值只适合本机学习端口已经用127.0.0.1绑死局域网里的其他机器访问不到。真实项目必须换强密码并且把.env写进.gitignore别提交到仓库。4.2 pgAdmin 的 servers.json主机名必须是 postgrespgAdmin 跑在容器里它连 PostgreSQL 时填localhost会指向 pgAdmin 容器自己不是数据库容器。正确写法是用 compose 服务名postgres。servers.json让 pgAdmin 首次启动就自动注册连接{ Servers: { 1: { Name: PostgreSQL 12 学习库, Group: Servers, Host: postgres, Port: 5432, MaintenanceDB: study_db, Username: postgres, SSLMode: prefer } } }回到 PowerShell 启动容器Set-Location D:\docker_install\postgresql12-lab docker compose pull docker compose up -d docker compose ps等postgresql12-db显示 healthy、postgresql12-pgadmin显示 Up浏览器打开http://127.0.0.1:5050用adminexample.com和.env里那个密码登录。第一次拉镜像可能要等几分钟具体取决于网络别在这一步以为卡死了。4.3 验证 SQL 与数据持久化左侧 Servers 里应该能看到“PostgreSQL 12 学习库”第一次连接会问数据库密码填.env里那个。然后右键study_db选 Query Tool手动粘贴并执行SELECT version(); SHOW server_version; CREATE TABLE IF NOT EXISTS students_sql ( id BIGSERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL, age INTEGER CHECK (age 0) ); INSERT INTO students_sql (name, age) VALUES (张三, 20), (李四, 22); SELECT * FROM students_sql ORDER BY id;SELECT version()应该显示 PostgreSQL 12.22。这里要明确一件事Codex 只能生成或解释这段 SQL真正执行的是你在 pgAdmin 的 Query Tool 里按执行按钮或 F5。数据库地址、端口、密码都不需要交给模型更不要说让它去连你的库。验证持久化可以这样docker compose down docker compose up -d docker compose exec postgres psql -U postgres -d study_db -c SELECT * FROM students_sql ORDER BY id;容器重建后数据还在说明命名卷生效。docker compose down不会删卷docker compose down -v会除非你明确要清空整个学习环境否则不要敲那个-v。5. 这条链路上最容易被误配的三个点5.1 Base URL 填 https://taotoken.net/api别填落地页Codex 的config.toml里base_url只能填 TaoToken 的接口地址https://taotoken.net/api。不要把带查询参数的官网落地页粘进去也不要在末尾追加/v1多这一截请求路径就变了。注册、创建 Key、看模型广场、查用量走官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 真正写进工具配置的接口地址是前者。两个用途分开后面排障时能少一半困惑看到 404 先去检查是不是把给人点的链接填进了程序字段。5.2 模型 ID 以模型广场为准model YOUR_MODEL_ID只是占位符具体填什么以 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 模型广场当时列出的 ID 为准。不要凭印象写一个带日期后缀的名字也不要拿别处看到的旧 ID 直接套。模型 ID 填错的典型现象是请求能发出去但返回模型不存在这时候通道本身没问题改配置里的那一行即可。5.3 pgAdmin 里填 localhost 会连到它自己在 pgAdmin 里注册服务器时Host name/address 填postgres端口 5432Maintenance database 填study_db。如果你在 Windows 上用 DBeaver、DataGrip 之类的客户端连才填127.0.0.1。两个场景的主机名不一样这跟 Codex 配置里“落地页和接口地址混用”是同一类错误把给浏览器看的地址填进了给程序连接的字段。6. 回头看这次排障Codex 负责解释Docker 负责运行6.1 哪些事交给 Codex哪些必须自己敲这次排障里 Codex 最有用的地方是把-5拆成 WSL 组件状态、安装器权限模式、安装包与系统 Build 兼容性三条假设并给出验证顺序。它不需要知道我的数据库密码也不需要连我的机器只要拿到退出码、日志和系统状态文本就能把范围缩窄。真正执行dism、敲Start-Process、点 UAC、在 pgAdmin 里建表全部在本地完成报错再贴回去。边界划清楚之后模型回答更具体你也不用担心它碰到不该碰的东西。6.2 下一步对一下用量再决定后面怎么用Codex 配置改完、Docker 和 pgAdmin 都跑通之后建议去 模型对话 用同一把 Key 发一条测试消息确认模型 ID 和 Base URL 没写错如果后面打算长期让 Codex 读日志、改 compose可以去 Coding Plan 看套餐是否够用Key 在 控制台 API Keys 创建和查看。安装器报-5这种问题最耗时间的从来不是敲命令而是不知道下一步该验证什么。把日志、退出码和系统状态整理好再交给能逐条解释的通道比反复重装省事得多。
返回列表