Dockerfile中設定locale成正體中文-以node.js為例

Configure Locale to Traditional Chinese in Dockerfile for Node.js

最近看了github發了些須修補安全性的信件,偶然發現VSCode內開dockerfile會提示使用的base image已經有安全疑慮,而且Docker hub已經將風險都列出來。

為了減少安全疑慮,我就決定改用最新發布的base image(無critical和high項目),翻一下以前寫過得文章: 在Ubuntu 16.04的Dockerfile中設定locale 開始修改。

以下以 Debian 13 (trixie) base image,跑node.js程式為例調改了

  1. apt來源使用台灣鏡像站,這裡使用台灣大學的鏡像。
    且trixie已預設使用APT Source List Format,修改apt設定是在 /etc/apt/sources.list.d/debian.sources 內,而且要修改的項目不太一樣。
  2. apt 不要安裝建議的套件,加上--no-install-recommends
  3. 產生英文與正體中文的語系檔並套用,這裡啟用中文語系時,多加了正則的 \b 來避免lzh_TW.UTF-8 語系也被我們啟用。

Dockerfile最終如下

FROM node:lts-trixie-slim

# 設定環境變數,避免 apt 安裝時互動
ENV DEBIAN_FRONTEND=noninteractive

# 修改 Debian Trixie 的 APT sources 成 使用台灣鏡像站
# 更新套件清單並安裝最小工具
RUN sed -i \
's|http://deb.debian.org/debian|http://debian.csie.ntu.edu.tw/debian|g' \
/etc/apt/sources.list.d/debian.sources \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
locales \
&& rm -rf /var/lib/apt/lists/*

# 產生正體中文 UTF-8 的 locale
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \
sed -i '/\bzh_TW.UTF-8/s/^# //g' /etc/locale.gen && \
locale-gen

# 設定 UTF-8 環境,確保支援中文
ENV LANG=zh_TW.UTF-8
ENV LANGUAGE=zh_TW:zh
ENV LC_ALL=zh_TW.UTF-8

# 設定工作目錄
WORKDIR /app

EXPOSE 3000

CMD ["npm", "start"]

使用指令:

  1. 建置docker image
    docker build -t mine/img:latest . -f Dockerfile
  2. 跑起container
    docker run -it --name my_container mine/img:latest
  3. 跑起container, 不用了就移除
    docker run --rm -it --name my_container mine/img:latest


留言