iT邦幫忙

2026 iThome 鐵人賽

DAY 15
0
IT Operation

Docker 新手村:從容器到 PostgreSQL 的實戰之路系列 第 15 篇

Day 15 - PostgreSQL 環境變數:設定帳號、密碼與資料庫

  • 分享至 

  • xImage
  •  

學習目標

  • 認識 Docker 環境變數
  • 了解 PostgreSQL 常用的環境變數
  • 學會設定資料庫帳號與密碼
  • 學會在建立 Container 時指定資料庫名稱

什麼是環境變數?

Day 14 建立 PostgreSQL Container 時,有使用到:

-e POSTGRES_PASSWORD=123456

其中 -e 就是用來設定 Environment Variable(環境變數)。

環境變數可以將一些設定值傳入 Container,例如帳號、密碼或資料庫名稱,而不需要直接修改 Image。

PostgreSQL 官方 Image 提供了幾個常用的環境變數:

POSTGRES_USER
POSTGRES_PASSWORD
POSTGRES_DB

設定 PostgreSQL 使用者

POSTGRES_USER 可以設定 PostgreSQL 的使用者名稱。

例如:

-e POSTGRES_USER=myuser

代表建立的 PostgreSQL 使用者名稱為:

myuser

如果沒有特別設定 POSTGRES_USER,預設使用者通常為 postgres。


設定 PostgreSQL 密碼

接著是昨天已經使用過的:

-e POSTGRES_PASSWORD=123456

它負責設定 PostgreSQL 使用者的密碼。

例如:

使用者:myuser
密碼:123456

實際開發時不建議使用 123456 這類簡單密碼,這裡只是為了方便練習。


設定 Database 名稱

除了帳號和密碼,也可以透過:

-e POSTGRES_DB=mydb

指定初始化時建立的 Database。

例如我們想建立:

mydb

就不需要等 PostgreSQL 啟動後再手動建立。


完整建立 PostgreSQL Container

把三個環境變數放在一起:

docker run --name my-postgres \
-e POSTGRES_USER=myuser \
-e POSTGRES_PASSWORD=123456 \
-e POSTGRES_DB=mydb \
-p 5432:5432 \
-d postgres

如果是在 Windows PowerShell,也可以直接寫成一行:

docker run --name my-postgres -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=123456 -e POSTGRES_DB=mydb -p 5432:5432 -d postgres

完成後,我們就會有:

PostgreSQL
│
├── User:myuser
├── Password:123456
└── Database:mydb

確認 Container 是否成功啟動

建立完成後,可以使用:

docker ps

查看 PostgreSQL 是否正在執行。

如果 Container 沒有正常啟動,可以查看:

docker logs my-postgres

透過 Logs 通常可以找到啟動失敗的原因。


為什麼修改環境變數沒有生效?

PostgreSQL 官方 Image 的這些初始化環境變數,主要會在資料目錄第一次初始化時使用。

因此如果原本的 PostgreSQL 已經初始化完成,只是停止後重新啟動:

docker start my-postgres

並不會重新建立帳號或資料庫。

可以簡單理解成:

第一次初始化
     ↓
讀取環境變數
     ↓
建立使用者與 Database
     ↓
後續重新啟動
     ↓
繼續使用原本資料

這個觀念在之後加入 Volume 保存 PostgreSQL 資料時會更加重要。


常見錯誤與修正

  • ❌ 把帳號密碼直接寫進程式碼 → ✅ 可以使用環境變數管理設定
  • ❌ 修改環境變數後重新啟動就期待資料庫重新初始化 → ✅ 初始化變數主要在第一次建立資料目錄時生效
  • ❌ 忘記設定 POSTGRES_PASSWORD → ✅ 建立 PostgreSQL Container 時設定密碼
  • ❌ 使用太簡單的正式資料庫密碼 → ✅ 正式環境應使用安全的密碼並妥善管理

今日小挑戰(可交付)

  • [ ] 認識 POSTGRES_USER
  • [ ] 認識 POSTGRES_PASSWORD
  • [ ] 認識 POSTGRES_DB
  • [ ] 自己設定一組 PostgreSQL 帳號與密碼
  • [ ] 建立自己命名的 Database
  • [ ] 使用 docker ps 確認 Container 狀態

DAY15 心得

今天進一步學習 PostgreSQL Container 的環境變數,昨天只有設定密碼,今天才知道原來使用者名稱和 Database 名稱也可以在建立 Container 時一起設定。

一開始看到 docker run 後面出現很多個 -e 會覺得指令很長,但拆開來之後其實就是分別設定帳號、密碼與資料庫名稱。

另外也了解到這些 PostgreSQL 環境變數和第一次初始化有關,並不是每次重新啟動 Container 都會重新建立資料庫。接下來就可以搭配之前學過的 Volume,讓 PostgreSQL 裡面的資料真正保存下來。


上一篇
Day 14 - 用 Docker 啟動第一個 PostgreSQL Container
下一篇
Day 16 - Docker Volume 實戰:讓 PostgreSQL 資料保存下來
系列文
Docker 新手村:從容器到 PostgreSQL 的實戰之路 共 16 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言