通過dockerfile設定映象的時區和中文編碼

2021-10-06 17:18:14 字數 1102 閱讀 6714

背景

我們的專案中有一塊日誌收集的功能,主要來收集容器化之後的一些例項的日誌,專案在執行之後發現收集到的日誌時間過濾有問題,並且中文顯示亂碼。

中文亂碼問題分析

因為亂碼問題涉及的點一般會比較多,遇到這種問題要從根源去分析是哪個環節導致的,有的是系統不支援中文,有的是因為資料庫編碼問題,有的是**中編碼問題。

我們的場景是從pod中獲取日誌,然後經過**解析,然後寫入到資料庫,以上提到的三個方面都涉及了。根據這個場景,先從根源入手,通過命令去檢視pod的日誌輸出,發現pod中的日誌輸出就是亂碼的,於是很快問題發現。因為映象是我們自己製作的,所以直接通過修改dockerfile檔案來解決,詳細如下,親測有效:

run yum -y install kde-l10n-chinese #安裝中文支援

run localedef -c -f utf-8 -i zh_cn zh_cn.utf8 #配置顯示中文

env lc_all zh_cn.utf8 #設定環境變數

env lang zh_cn.utf-8 #設定環境變數

看到網上有說需要同時安裝 glibc-common,也即

run yum -y install kde-l10n-chinese && yum -y reinstall glibc-common #安裝中文支援
多數時候安裝 glibc-common會返回錯誤碼,導致docker build失敗,這時候其實多數不用進行此包的安裝

時區問題

時區的問題定位要簡單很多,一般**注意在**中注意使用本地時區的轉化就好,各種開發語言基本都有對應的時區轉化方法。

如果在映象中進行轉化dockerfile中增加以下命令即可:

#定義時區引數

env tz=asia/shanghai

#設定時區

run ln -snf /usr/share/zoneinfo/$tz /etc/localtime &&

echo

'$tz'

> /etc/timezone

使用Dockerfile構建nginx映象

dockerfile的指令 from 指定基礎映象 from是必備的指令,並且必須為第一條指令 run 用來執行命令列命令。其基本格式 shell格式 run 命令 輸入在bash環境中的命令即可,乙個dockerfile允許使用run不得超過127層,所以,使用一次run,使用 換行,使用 執行下...

Dockerfile編譯安裝nginx映象

root localhost mkdir nginx root localhost cd nginx root localhost nginx touch dockerfile root localhost nginx vim dockerfile from daocloud.io library ...

Dockerfile構建映象,映象入倉庫,映象啟動

dockerfile是由一系列命令和引數構成的指令碼,這些命令應用於基礎映象並最終建立乙個新的映象。它們簡化了從頭到尾的流程並極大的簡化了部署工作。dockerfile從from命令開始,緊接著跟隨者各種方法,命令和引數。其產出為乙個新的可以用於建立容器的映象。dockerfile示例 form u...