Docker 部署:服务器生产环境的首选方案
云服务器上长期挂机器人,Docker 是官方文档着墨最多、坑最少的方式。以下命令默认已装 Docker,没装的先看 Docker 官方文档装好再来。
方式一:单容器运行
mkdir astrbot
cd astrbot
sudo docker run -itd -p 6185:6185 -p 6199:6199 \
-v $PWD/data:/AstrBot/data \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
--name astrbot soulter/astrbot:latest
Windows 下去掉 sudo。两个端口的含义:6185 是管理面板,6199 是反向 WebSocket 服务端口,接消息平台时要用。
大陆拉不动镜像:把镜像名换成 m.daocloud.io/docker.io/soulter/astrbot:latest,其余不变(镜像加速由 DaoCloud 提供)。
Windows Docker Desktop 用 CMD 写法:
docker run -itd -p 6185:6185 -p 6199:6199 -e TZ=Asia/Shanghai -v "%cd%\data:/AstrBot/data" --name astrbot soulter/astrbot:latest
PowerShell 把 %cd% 换成 ${PWD}。TZ 填 IANA 时区格式,中国就是 Asia/Shanghai。WSL2 环境同步宿主机时间需要额外挂载 /etc/localtime 与 /etc/timezone,路径写 \\wsl.localhost\ 发行版名 开头。
看运行日志:sudo docker logs -f astrbot。
方式二:Docker Compose
先 clone 官方仓库,然后:
sudo docker compose up -d
compose.yml 里同样可以把镜像替换为 DaoCloud 加速地址。
两种变体编排文件也在仓库里:
- 带 Agent 沙盒:用 compose-with-shipyard.yml 启动,先改好其中的环境变量(如 Shipyard 的 access token),再拉取沙盒镜像。支持原生 Python、Shell 代码执行
- AstrBot 与 NapCat 一体:下载 NapCat-Docker 仓库提供的 astrbot.yml,一条 compose 同时拉起机器人和 QQ 协议端,适合纯 Docker 玩 QQ 的场景。记得把文件里 6199 端口映射的注释去掉
云服务器端口放行
部署在哪朵云上,就去哪家控制台的安全组放行 6185 和 6199。宝塔用户在面板的安全页同步放行。这是新手最常漏的一步,表现为面板打不开、协议端连不上。
容器内重置密码
镜像内置了 CLI,忘记密码不用进配置文件:
sudo docker exec -it astrbot astrbot password
sudo docker restart astrbot
第一个 astrbot 是容器名,名字不对就用 sudo docker ps 查。带 --username 参数可同时改用户名。改完必须重启容器生效。
容器网络两个易错点
- localhost 陷阱:Docker 隔离了网络,容器里的 localhost 指容器自己。管理面板要从宿主机或别的机器访问,用服务器公网 IP 或局域网 IP
- HTTP 代理指向:WebUI 里「设置 → 网络 → 代理与依赖源 → HTTP 代理」填的地址是容器视角。代理跑在宿主机时,Mac/Windows Docker Desktop 填 host.docker.internal,Linux 填 docker0 网关地址(通常是 172.17.0.1);代理在另一个容器里就直接写容器名。Clash 类工具常见 HTTP 7890、SOCKS 7891,协议前缀按实际写 http:// 或 socks5://,并确认代理端口映射到了宿主机、没只绑 127.0.0.1