隨著技術(shù)的發(fā)展,容器化技術(shù)越來越受到關(guān)注和青睞。Docker作為目前最著名的容器化平臺(tái)之一,已經(jīng)成為各個(gè)企業(yè)實(shí)現(xiàn)應(yīng)用快速部署、持續(xù)集成、快速迭代和生產(chǎn)環(huán)境穩(wěn)定性的重要工具。但是,在使用Docker的過程中,我們不可避免地會(huì)遇到一些問題,其中中文亂碼就是大家經(jīng)常會(huì)遇到的一個(gè)問題。
中文亂碼問題的產(chǎn)生
在Docker容器運(yùn)行時(shí),由于不同的容器鏡像,系統(tǒng)、環(huán)境和服務(wù)不同,我們需要在Docker 鏡像中先把中文字體文件導(dǎo)入,并將字體路徑加入環(huán)境變量中,才能展示中文。否則,中文就會(huì)出現(xiàn)亂碼的情況。
解決方案一:
手動(dòng)導(dǎo)入中文字體文件:
從Windows復(fù)制中文字體文件到Docker容器中:
- 查找Windows上的中文字體(一般位于C:\Windows\Fonts 目錄下),例如simkai.ttf和simfang.ttf;
- 將字體文件拷貝到Docker容器中,例如:
docker cp C:\Windows\Fonts\simkai.ttf mycontainer:/usr/share/fonts
docker cp C:\Windows\Fonts\simfang.ttf mycontainer:/usr/share/fonts
- 安裝字體文件到容器的字體庫中:
docker exec mycontainer apk add fontconfig
docker exec mycontainer fc-cache -fv
- 在環(huán)境變量中添加字體路徑:
docker exec mycontainer export LANG=zh_CN.UTF-8
docker exec mycontainer export LANGUAGE=zh_CN.UTF-8
docker exec mycontainer export LC_ALL=zh_CN.UTF-8
docker exec mycontainer export FONT_HOME=/usr/share/fonts
docker exec mycontainer export JAVA_HOME=/usr
解決方案二:
使用預(yù)設(shè)模板制作新的Docker鏡像:
我們可以使用Dockerfile文件創(chuàng)建一個(gè)新的鏡像,并在其中直接添加中文字體文件、字體庫和環(huán)境變量等內(nèi)容。
以下是一個(gè)例子:
FROM alpine:3.11
RUN apk –no-cache add ttf-dejavu fontconfig && rm -rf /var/cache/apk/*
ENV LANG=zh_CN.UTF-8 \
LANGUAGE=zh_CN.UTF-8 \
LC_ALL=zh_CN.UTF-8 \
FONT_HOME=/usr/share/fonts \
JAVA_HOME=/usr
ADD ./fonts/* ${FONT_HOME}/
RUN fc-cache -fv
CMD ["tail", "-f", "/dev/null"]
以上代碼中,我們從Alpine Linux 3.11的基礎(chǔ)鏡像開始,先安裝了ttf-dejavu字體庫和fontconfig插件,然后將我們的自定義中文字體文件ADD進(jìn)鏡像。最后運(yùn)行fc-cache命令刷新字體庫,保證容器能夠正確地使用中文。
總結(jié)
中文亂碼問題是Docker使用中的常見問題,在使用Docker之前,我們需要先明確用途和需求,盡可能地在鏡像制作時(shí)就解決中文亂碼的問題。對(duì)于現(xiàn)有的Docker容器,我們也可以通過手動(dòng)導(dǎo)入中文字體文件或是創(chuàng)建一個(gè)預(yù)設(shè)模板的新鏡像來完成中文正常顯示的需求。