寫 Dockerfile 的時候,過程當中應該關閉的資源、服務,一樣要如實關閉

這幾天 debug 的心得之一。

這例子是這樣的:在打包 Docker 容器中安裝 PostgreSQL,並在安裝後就立即啟動服務,做了一些初始化的設定,但是忘了要在設定完成後關掉它,於是就會造成某些資料庫相關的檔案沒有正常關檔。

在之後要用到 PG 時,伺服器雖然表面上正常啟動了,但是背景仍在執行因為之前沒有正常關閉服務而需要跑的復原工作,於是就出現 “psql: FATAL: the database system is starting up” 這個第一眼讀來有點丈二金剛摸不著頭腦的錯誤訊息,同時 PG 也不能正常對外服務,便會造成相關的操作失效。

執行 docker build 的時候,要記得每個步驟都是 run 完就由 docker 寫入差異部份至檔案系統,然後就結束了,這個步驟執行時跑起來的 process,在下一個步驟執行時,是不會留在記憶體待命的,這跟使用其他的 configuration management 軟體來做這類「無人值守」工作時,有很大的不同,務必要記住這點。

CC BY-SA 4.0 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Leave a Reply

Your email address will not be published. Required fields are marked *