在使用 WordPress 時,如果在「網站健康檢查」頁面看到以下訊息:
REST API 發生錯誤
REST API 是 WordPress 及其他應用程式與伺服器進行通訊的一種方式。以區塊編輯器畫面為例,它便是依賴 REST API 來顯示與儲存內容。
測試 REST API 時發生錯誤:REST API 回應: (http_request_failed) cURL error 28: Connection timed out after 10001 milliseconds
代表你的 WordPress 無法透過內部網路與自己通訊。這種錯誤看似奇怪,實際上非常常見,尤其當你的網站部署在 Docker 或反向代理環境 中。
🔍 問題現象
WordPress 會在檢查 REST API 時,嘗試透過 HTTP 請求連到自己的網址(例如 https://www.nuface.tw/wp-json/)。
但如果容器內的 DNS 無法解析這個網域,就會出現逾時錯誤 cURL error 28。
簡單來說,就是「WordPress 呼叫自己時,找不到自己」。
🧠 問題原因分析
在 Docker 架構中,容器的 DNS 設定通常繼承自 Docker Daemon 的預設設定。
若你的網站使用內部 DNS(例如公司內部的 172.16.100.1),而 Docker 內部沒有指定這個 DNS,
那麼容器在解析 www.nuface.tw 時就會失敗,導致請求逾時。
因此,REST API 錯誤的真正原因是 容器內 DNS 設定不正確。
🛠️ 解決步驟
1️⃣ 在 docker-compose.yml 中加入內部 DNS
開啟你的 WordPress 容器設定檔(例如 docker-compose.yml),在服務段落內加上:
services:
wordpress:
image: wordpress:latest
container_name: wordpress
restart: always
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: yourpassword
WORDPRESS_DB_NAME: wordpress
dns:
- 172.16.100.1 # 內部 DNS(例如公司 DNS)
儲存後重新啟動容器:
docker compose down
docker compose up -d
2️⃣ 確認容器內 DNS 正常
進入容器測試解析:
docker exec -it wordpress bash
cat /etc/resolv.conf
dig www.nuface.tw
若能正確解析出 IP,表示 DNS 已生效。
3️⃣ 驗證 REST API 是否恢復
回到 WordPress 後台 → 工具 → 網站健康檢查 → 狀態
重新執行檢查,應會看到:
✅ REST API 運作正常
至此,問題已成功解決!
💡 延伸建議
為避免類似問題再次發生,建議:
- 在 Docker Daemon 層設定預設 DNS
編輯/etc/docker/daemon.json:{ "dns": ["172.16.100.1", "8.8.8.8"] }然後重啟 Docker:systemctl restart docker - 使用內部 DNS 解析內部域名
若 WordPress 與反向代理(例如 Nginx、Traefik)在同一主機,
內部 DNS 能避免外部繞行導致的連線逾時。
✅ 結論
這次的 REST API 錯誤並非 WordPress 程式錯誤,而是 容器網路與 DNS 配置問題。
在 Docker 環境中,只要確保容器能正確解析網站域名,
無論是 REST API、Gutenberg 編輯器、還是自動更新檢查,都能恢復正常運作。
📘 總結一句話:
「當 WordPress 無法呼叫自己時,請先檢查 DNS。」