跳至內容

如何使用 Docker 快速運行 Odoo

以 Odoo Docker Hub Image 說明
先前 Odoo 社群版升級企業版其實不難 (下) 提到我們可以使用 Docker 快速運行 Odoo,今天就來填坑啦!

今天的目標就是帶大家看懂 Odoo Docker Hub Image 上的操作說明,讓想嘗試看看 Odoo 的新朋友們更好上手!

開始前請先參考連結安裝Docker,無腦安裝不用怕!

  1. 先簡單複習一下 Odoo
    Odoo
    是目前全球功能最完整的開源 ERP 軟體,僅是免費的社群版就能滿足很多剛起步小公司的日常管理需求,加上付費訂閱制的企業版即可使用超過 70 個功能完整的應用程式!

  2. Docker 的用途是什麼?
    白話來說就是一個將作業環境及應用程式封裝成一個獨立檔案(Docker Image),如此這個 Image 可以丟到任何的硬體環境中運行,不需要再根據不同主機來調試參數。

    也因此在軟體工程界很常用來作為快速部署、測試驗證、甚至當作虛擬主機來使用。更多詳細說明可以參考各路大神們的文章,或是直接問 ChatGPT(ChatGPT超懂 Docker,問它就對了)!

Odoo 已經很貼心的包裝好各個版本的 Odoo Docker Image 並放在 Docker Hub上了,並且還有使用的說明,我們只需要按照步驟即可成功運行!

話雖如此,要理解文件中的每個指令意義對新手來說有點難度,今天我們就來詳細的跟大家說明!

首先快速說一下我們要做什麼,很簡單:

  1.  運行一個postgresql環境(container)
  2. 運行一個Odoo環境(container)
  3. 兩個環境(container)能連結在一起就搞定了!


下面開始詳細的步驟跟說明:

  1. 運行一個 PostgreSQL 服務

    1. 首先在終端機中透過下列指令運行一個載入PostgreSQL image 的容器
      1. docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=odoo_db --name db-container postgres:15
      2. 結果


    2. 指令說明:
      1. docker:呼叫 Docker CLI,用來對 Docker daemon 發指令。

      2. run:建立並啟動一個新 container(流程:找 image → 建 container → 套用參數 → 啟動)。

      3. -d:detached mode。container 在背景執行,指令立刻回到 shell,輸出 container id。

      4. -e POSTGRES_USER=odoo:設定環境變數 POSTGRES_USER,交給 postgres 官方 image 的 entrypoint 使用。

        效果:第一次初始化資料目錄時,建立一個 PostgreSQL 角色(role/user)名稱為 odoo。

      5. -e POSTGRES_PASSWORD=odoo:設定環境變數POSTGRES_PASSWORD。

        效果:第一次初始化時,設定 POSTGRES_USER 對應角色的密碼為 odoo。沒有提供密碼時,Odoo 官方 image 會拒絕初始化(除非你改用其他允許無密碼的設定方式)。

      6. -e POSTGRES_DB=odoo_db:設定環境變數 POSTGRES_DB。

        效果:第一次初始化時建立一個資料庫,名稱為 odoo_db。
        若不指定,預設會建立與 POSTGRES_USER 同名的資料庫(此例會是 odoo)。

      7. --name db-container:把這個 container 的名稱固定為 db-container,不讓 Docker 自動產生隨機名字(一般命名不需要加上-container,這邊是為了讓大家更好區分)。

        效果:後續可用 docker logs db-container、docker stop db-container、docker exec -it db-container ... 來對該container進行操作。
        若在同一個 user-defined network 下,其他 container 可用 hostname db-container 解析到它(Docker DNS)。

      8. postgres:15:image 參照:<repository>:<tag>。
        postgres:Docker Hub 上的官方 PostgreSQL image repository
        15:tag,代表 PostgreSQL 主版本 15 系列(實際會對應到某個具體的小版本與發行 build)。

        行為:本機沒有 postgres:15 → 自動 pull 以該 image 的預設啟動命令啟動 PostgreSQL server。

    3. 其中透過 -e 指定的環境變數,都是在 postgres:15 這個 image 中載入時透過 docker-entrypoint.sh 讀取使用

  2. 再來運行一個 Odoo 服務

    1. 在終端機中透過下列指令運行一個載入 Odoo image 的容器
      1. docker run -p 8069:8069 --name odoo-container --link db-container:db -t odoo -d odoo_db -i base
        
      2. 結果


    2. 指令說明:
      1. -p 8069:8069:將容器內的 8069 port 對外開放到主機的 8069 port。

        效果:在主機瀏覽器中輸入 http://localhost:8069 即可連線到 Odoo 的 Web 介面。

      2. --name odoo-container:指定 container 名稱為 odoo-container,方便後續管理與操作。

      3. --link db-container:db:將名稱為 db-container 的 PostgreSQL container,連結到 Odoo container 內,並指定在 Odoo container 中的 hostname 為 db。

        效果:Odoo container 內部可以透過 db 這個名稱連線到 PostgreSQL,而 Odoo 官方 Docker Image 的預設資料庫主機設定也正是使用 db。

        註:--link 為較舊的 Docker 連線方式,目前已不建議於正式環境使用,可以改用 Docker Compose,這裡我們主要先了解概念,後續再學習 Docker Compose 會更容易上手。

      4. -t:分配一個虛擬終端(TTY),讓容器內程式的輸出行為較符合終端機顯示習慣,如果要像 db-container 一樣在背景執行則改為 -d 即可。

      5. odoo:Docker Hub 上的官方 Odoo image,未指定 tag 時預設使用 latest。

        行為:本機沒有 odoo image → 自動從 Docker Hub 下載 → 啟動 Odoo 服務。

      6. -d odoo_db:指定要連結的 db 名稱。

      7. -i base:初始化 Odoo 資料庫,此為 Odoo 的指令,只是透過docker帶入。

  3. 確認 Container 是否成功運行

    1. 開啟網址 http://localhost:8069/ ,出現下列登入畫面,輸入預設密碼"admin"即可成功登入!


  4. 關閉 Odoo 及 Postgres 容器服務

    1. 如果容器是在終端機的頁面( -t 指令),按下 "Ctrl+C" 即可結束退出,此時 Container 也會隨之終止。
    2. 如果是在背景執行( -d 指令),則可以透過下列步驟終止。




以上就是透過 Docker 快速運行 Odoo 的方法,跟官方的指令略有不同,大家可以參考看看囉!



網誌: Odoo分享
如何使用 Docker 快速運行 Odoo
吳逸顒 2026年1月31日
分享這個貼文
標籤
登入 發表評論
Odoo 社群版升級企業版其實不難 (下)
Docker - Linux 篇