先前 Odoo 社群版升級企業版其實不難 (下) 提到我們可以使用Docker 快速運行 Odoo,今天就來填坑啦!
今天的目標就是帶大家看懂 Odoo Docker Hub Image 上的操作說明,讓想嘗試看看 Odoo 的新朋友們更好上手!
開始前請先參考連結安裝Docker,無腦安裝不用怕!
- 先簡單複習一下 Odoo
Odoo 是目前全球功能最完整的開源 ERP 軟體,僅是免費的社群版就能滿足很多剛起步小公司的日常管理需求,加上付費訂閱制的企業版即可使用超過 70 個功能完整的應用程式! - DockerDocker:Docker 白話來說就是一個將作業環境及應用程式封裝成一個獨立檔案(Image),如此這個 Image 可以丟到任何的硬體環境中運行,不需要再根據不同主機來調試參數。也因此在軟體工程界很常用來作為快速部署、測試驗證、甚至當作虛擬主機來使用。更多詳細說明可以參考各路大神們的文章,或是直接問ChatGPT(ChatGPT超懂Docker,問它就對了)!
Odoo 已經很貼心的包裝好各個版本的 Odoo Docker Image 並放在 Docker Hub上了,並且還有使用的說明,我們只需要按照步驟即可成功運行!
話雖如此,要理解文件中的每個指令意義對新手來說有點難度,今天我們就來詳細的跟大家說明!
首先快速說一下我們要做什麼,很簡單:
- 運行一個postgresql環境(container)
- 運行一個Odoo環境(container)
- 兩個環境(container)能連結在一起就搞定了!
下面開始詳細的步驟跟說明:
運行一個 PostgreSQL
- 首先在終端機中透過下列指令運行一個載入PostgreSQL image 的容器
$ docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=odoo_db --name db-container postgres:15
- 結果

- 指令說明:
- docker:呼叫 Docker CLI,用來對 Docker daemon 發指令。
- run:建立並啟動一個新 container(流程:找 image → 建 container → 套用參數 → 啟動)。
- -d:detached mode。container 在背景執行,指令立刻回到 shell,輸出 container id。
- -e POSTGRES_USER=odoo:設定環境變數 POSTGRES_USER,交給 postgres 官方 image 的 entrypoint 使用。
效果:第一次初始化資料目錄時,建立一個 PostgreSQL 角色(role/user)名稱為 odoo。 - -e POSTGRES_PASSWORD=odoo:設定環境變數POSTGRES_PASSWORD。
效果:第一次初始化時,設定 POSTGRES_USER 對應角色的密碼為 odoo。沒有提供密碼時,Odoo 官方 image 會拒絕初始化(除非你改用其他允許無密碼的設定方式)。 - -e POSTGRES_DB=odoo_db:設定環境變數 POSTGRES_DB。
效果:第一次初始化時建立一個資料庫,名稱為 odoo_db。
若不指定,預設會建立與 POSTGRES_USER 同名的資料庫(此例會是 odoo)。 - --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)。 - postgres:15:image 參照:<repository>:<tag>。
postgres:Docker Hub 上的官方 PostgreSQL image repository
15:tag,代表 PostgreSQL 主版本 15 系列(實際會對應到某個具體的小版本與發行 build)。
行為:本機沒有 postgres:15 → 自動 pull 以該 image 的預設啟動命令啟動 PostgreSQL server。
- 其中透過 -e 指定的環境變數,都是在 postgres:15 這個 image 中載入時透過 docker-entrypoint.sh 讀取使用
再來運行一個 Odoo 服務
- 在終端機中透過下列指令運行一個載入 Odoo image 的容器
docker run -p 8069:8069 --name odoo-container --link db-container:db -t odoo -d odoo_db -i base
- 結果

- 指令說明:
- -p 8069:8069:將容器內的 8069 port 對外開放到主機的 8069 port。
效果:在瀏覽器中輸入 http://localhost:8069 即可連線到 Odoo 的 Web 介面。 - --name odoo-container:指定 container 名稱為 odoo-container,方便後續管理與操作。
- --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 會更容易上手。 - -t:分配一個虛擬終端(TTY),讓容器內程式的輸出行為較符合終端機顯示習慣,如果要像 db-container 一樣在背景執行則改為 -d 即可。
- odoo:Docker Hub 上的官方 Odoo image,未指定 tag 時預設使用 latest。
行為:本機沒有 odoo image → 自動從 Docker Hub 下載 → 啟動 Odoo 服務。 - -d odoo_db:指定要連結的 db 名稱。
- -i base:初始化 Odoo 資料庫,此為 Odoo 的指令,只是透過docker帶入。
- -p 8069:8069:將容器內的 8069 port 對外開放到主機的 8069 port。
確認 Container 是否成功運行
- 開啟網址 http://localhost:8069/ ,出現下列登入畫面,輸入預設密碼"admin"即可成功登入!

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

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