2026/10/28 · AI 上線專家

docker-compose.yml 裡有五個服務,為什麼上線後網站連不上資料庫?

docker-compose.yml 裡有五個服務,為什麼上線後網站連不上資料庫?

為什麼本機跑得好好的,上線就連不上了?

您用 ChatGPT 或 Cursor 做了一個會員系統,docker-compose up 在自己電腦上跑得很順。打包上傳到 Render、Railway 或 Fly.io,網站畫面出來了,但登入功能一直轉圈,後台日誌顯示「Redis connection refused」或「database host not found」。

問題不在程式碼,而是在部署架構:AI 工具習慣產生一個 docker-compose.yml,裡面定義了 web、db、redis、worker 四五個服務,本機用 Docker Compose 一次啟動沒問題。但多數託管平台(包括 Heroku、Render、Railway、Fly.io 的免費層或基本方案)預設只會啟動「一個」容器——通常是您指定的 web 服務——其他容器根本不會跑起來。

您的網站程式碼裡寫著 REDIS_HOST=redis、DB_HOST=db,這些主機名稱在 Docker Compose 的虛擬網路裡有效,但當平台只跑 web 容器時,redis 和 db 這兩個容器不存在,連線自然失敗。

先盤點:您的專案到底依賴哪些服務

打開 docker-compose.yml,看 services: 區塊底下列了幾個名稱。常見的組合:

  • web — 您的網站主程式(Node.js、Python Flask、Laravel 等)
  • db 或 postgres / mysql — 資料庫
  • redis — 快取或工作佇列
  • worker 或 celery — 背景任務處理程序
  • nginx — 反向代理(AI 有時會多加這層)

接著檢查程式碼裡的環境變數或設定檔:

  • 搜尋 REDIS_URL、REDIS_HOST、DATABASE_URL、DB_HOST 這類關鍵字
  • 看 .env.example 或 config/database.yml、settings.py 等設定檔
  • 確認哪些服務「必須存在」網站才能正常運作,哪些只是選配(例如 Redis 只用來加速、拿掉也不會壞)

如果您的專案只有 web + db,處理起來相對單純;如果還有 redis + worker,就需要多做幾步調整。

解法一:改用平台提供的外部服務(推薦給多數人)

大部分託管平台都提供「附加元件」(Add-ons)或「整合服務」,讓您用外部的資料庫或 Redis,不必自己跑容器:

資料庫

  • Render:Dashboard 裡可以建立 PostgreSQL 資料庫,會給您一組 DATABASE_URL(內部或外部連線網址)
  • Railway:專案裡點「New」→「Database」→「PostgreSQL」,自動產生環境變數
  • Fly.io:用 fly postgres create 指令建立,會回傳連線字串

Redis

  • Render:付費方案可加 Redis 附加元件
  • Railway:同樣點「New」→「Database」→「Redis」
  • Upstash(獨立服務):免費額度通常夠中小專案用,註冊後拿到 REDIS_URL 貼進平台的環境變數

改完之後,在平台的環境變數設定頁面填入新的 DATABASE_URL 和 REDIS_URL,並且把 docker-compose.yml 裡的 db 和 redis 區塊註解掉或刪除,只留 web 服務。重新部署,網站就能連上外部服務了。

這個做法的好處是平台會幫您處理備份、監控、自動更新;壞處是免費額度有限,超過用量或連線數就要付費。

解法二:換一個「真的支援多容器」的平台

如果您希望完整保留 docker-compose.yml 的結構(例如需要自訂資料庫版本、或想在同一個環境裡跑 worker 容器),可以考慮:

  • Coolify(自架或託管):開源 PaaS,支援直接讀取 docker-compose.yml 並啟動所有服務
  • DigitalOcean App Platform:付費方案支援多容器部署
  • 自己租一台 VPS(Linode、DigitalOcean Droplet):用 docker-compose up -d 直接跑,但您要自己處理網域、SSL、監控、備份

這條路的好處是「跟本機環境一致」,AI 產生的設定幾乎不用改;壞處是多了維運責任,出問題時沒有平台客服可以問,而且 VPS 帳單通常比託管平台的免費層貴。

什麼時候該選哪一種?

如果您的專案:

  • 只是想快速給客戶看 Demo、或測試功能 → 上傳到 AI 上線專家的免費預覽,系統會自動判斷是否為純靜態網站;如果需要後端,會在健診報告裡告訴您缺了哪些服務
  • 需要資料庫 + Redis,但流量不大(每天幾百到幾千人) → 改用平台附加元件(解法一)
  • 有背景任務(worker 容器),且必須跟網站共用同一個檔案系統或內部網路 → 換支援多容器的平台(解法二),或付費升級現有平台方案
  • 還在開發階段、不確定要用哪些服務 → 先在本機把功能跑通,再決定部署方式;不要急著「先上線再說」

如果您已經上傳了 ZIP 檔、卻發現網站連不上資料庫,最快的處理方式是:打開 docker-compose.yml,把 db: 和 redis: 區塊刪掉或註解,在環境變數裡填入外部服務網址,重新打包上傳。這樣至少能讓網站「連得上」,之後再慢慢調整設定。

下一步:讓您的專案真正能穩定運作

改完設定、網站能連上資料庫了,接下來還有備份、監控、擴充性要處理。如果您手上有一個「AI 產生的 docker-compose 專案」,想知道:

  • 這個專案到底依賴哪些外部服務?
  • 現在選的平台能不能長期跑?
  • 要改多少設定才能安全上線?

可以到 /estimate/ 上傳程式碼做免費健診,AI 會幫您列出依賴清單、指出哪些設定需要調整,以及建議適合的部署方式。如果專案已經能在本機跑、只是不知道怎麼讓它在正式環境穩定運作,直接聯絡我們 聊聊您的情況,我們會給您一份具體的收尾建議。


關於 AI 上線專家

AI 上線專家是一套「上傳就上線」的網站預覽系統:把網站專案打包成 ZIP 上傳,系統會自動判斷專案類型並完成建置,成功後給您一個 您的名稱.aionline.tw 公開網址,可以直接傳給客戶或同事看。

  • 免費預覽 7 天,不需信用卡,到期自動下線、不會自動扣款
  • 適合 HTML / CSS / JavaScript 網站,或 Cursor、Lovable 等 AI 工具做出來、可輸出靜態檔案的前端專案
  • 需要登入、資料庫或後端服務的專案,系統會轉為 AI 健診,說明卡在哪裡;需要開發或長期託管,可以直接聯絡我們

上傳專案,取得預覽網址 →