Hyperf容器启动后无法访问,首要检查server.host是否设为'0.0.0.0'而非'127.0.0.1'或'localhost',并确认Docker运行时使用-p参数正确映射端口(如-p 9501:9501),二者缺一即导致connection refused。

Hyperf容器启动后访问不了,先看 server.host 是不是 0.0.0.0
Hyperf默认监听 127.0.0.1,这在容器里等于只接受自己发来的请求,外部根本连不上。必须改成 0.0.0.0 才能让宿主机或其他容器通过映射端口访问。
-
config/autoload/server.php中的host值必须是'0.0.0.0'(字符串),不能是'localhost'或留空 - 如果用了环境变量覆盖(如
SERVER_HOST),确保启动时传入的是0.0.0.0,不是127.0.0.1 - 改完要重建镜像或重启容器,热重载不生效
Docker run 没加 -p,docker ps -a 里 PORTS 列就是空的
Hyperf监听对了、容器也跑起来了,但宿主机 curl 或浏览器打不开,大概率是端口根本没映射出去。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 启动命令必须带
-p 9501:9501(或你实际用的端口),顺序是宿主机端口:容器端口 -
-d要放在-p后面,否则参数解析可能错位;推荐写成docker run -itd -p 9501:9501 ... - 运行后立刻执行
docker ps -a,确认PORTS列显示类似0.0.0.0:9501->9501/tcp
容器能连宿主机 MySQL,但宿主机连不上 Hyperf,说明网络方向搞反了
这是常见混淆点:容器访问宿主机(比如 MySQL)和宿主机访问容器(比如 Hyperf HTTP 服务)是两套独立路径,解决方式完全不同。
- 容器连宿主机 MySQL → 用
host.docker.internal(Win/Mac)或网关 IP(Linux),跟server.host无关 - 宿主机连 Hyperf 容器 → 只依赖
-p映射 +server.host = '0.0.0.0',跟容器怎么连 MySQL 毫无关系 - 别因为 MySQL 连上了,就默认 Hyperf 也能被访问——它们走的不是同一条链路
Windows 上 Docker Desktop 启动失败,先检查 Hyper-V 和 WSL2
Hyperf 镜像本身没问题,但容器根本起不来,往往是 Docker Desktop 底层没跑通。
- PowerShell 管理员模式下运行
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All,确认状态为Enabled - 如果 WSL2 异常,执行
wsl --update和wsl --set-default-version 2 - 验证
docker version输出中同时有Client和Server,只有Client说明引擎没起来
curl localhost:9501 就永远返回 connection refused。

















