如何在Docker Alpine中设置语言环境?

Gea*_*any 6 locale centos docker alpine-linux

我可以使用CentOS映像设置语言环境

FROM centos

ENV LANG en_US.UTF-8

ENV LC_ALL en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

但这似乎不适用于Alpine图片。如何设置Alpine图片的语言环境?

F1L*_*nux 8

这就是我在 Alpine Linux 中容器化应用程序时设置时间和编码的方式。

以下内容经过测试,自 Alpine Linux 版本 3.16 起可以正常工作:

在里面Dockerfile

安装所需的包:

RUN apk add --no-cache --update musl musl-utils musl-locales tzdata
Run Code Online (Sandbox Code Playgroud)

从以下选项中设置时区 /usr/share/zoneinfo/

ENV TZ=Europe/London
RUN cp /usr/share/zoneinfo/Europe/London /etc/localtime
Run Code Online (Sandbox Code Playgroud)

在 中/usr/share/i18n/locales/muslMusl将安装以下编码:

cs_CZ.UTF-8
de_CH.UTF-8
de_DE.UTF-8
en_GB.UTF-8
en_US.UTF-8
es_ES.UTF-8
fi_FI.UTF-8
fr_FR.UTF-8
it_IT.UTF-8
nb_NO.UTF-8
nl_NL.UTF-8
pt_BR.UTF-8
pt_PT.UTF-8
ru_RU.UTF-8
sr_RS.UTF-8
sv_SE.UTF-8
Run Code Online (Sandbox Code Playgroud)

en_GB.UTF-8从上面的列表中选择您喜欢的编码,如果您不想在 Dockerfile 的以下行中使用 GB 英语,请将其替换为:

RUN echo 'export LC_ALL=en_GB.UTF-8' >> /etc/profile.d/locale.sh && \
  sed -i 's|LANG=C.UTF-8|LANG=en_GB.UTF-8|' /etc/profile.d/locale.sh
Run Code Online (Sandbox Code Playgroud)

尽管您必须使用sed参数LANG=,但通过附加export LC_ALL=到末尾,/etc/profile.d/locale.sh其余部分已为您完成。

构建之后,当您现在执行:

locale
Run Code Online (Sandbox Code Playgroud)

您会看到默认编码已更改C.UTF-8 en_GB.UTF-8

bash-5.1# locale
LANG=en_GB.UTF-8
LC_CTYPE=en_GB.UTF-8
LC_NUMERIC=en_GB.UTF-8
LC_TIME=en_GB.UTF-8
LC_COLLATE=en_GB.UTF-8
LC_MONETARY=en_GB.UTF-8
LC_MESSAGES=en_GB.UTF-8
LC_ALL=en_GB.UTF-8
bash-5.1#
Run Code Online (Sandbox Code Playgroud)

当你执行时:

date
Run Code Online (Sandbox Code Playgroud)

您会注意到时间现在已更改UTC BST

Mon Jul 18 16:59:51 BST 2022
Run Code Online (Sandbox Code Playgroud)

最后,关于 AlpineMusl语言环境实现的一些值得一读的注释在这里


raf*_*bbr 6

它对我有用,Dockerfile:

FROM openjdk:8-jdk-alpine

RUN apk update
RUN apk add tzdata
RUN cp /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
RUN rm -r /usr/share/zoneinfo/Africa && \
    rm -r /usr/share/zoneinfo/Antarctica && \
    rm -r /usr/share/zoneinfo/Arctic && \
    rm -r /usr/share/zoneinfo/Asia && \
    rm -r /usr/share/zoneinfo/Atlantic && \
    rm -r /usr/share/zoneinfo/Australia && \
    rm -r /usr/share/zoneinfo/Europe  && \
    rm -r /usr/share/zoneinfo/Indian && \
    rm -r /usr/share/zoneinfo/Mexico && \
    rm -r /usr/share/zoneinfo/Pacific && \
    rm -r /usr/share/zoneinfo/Chile && \
    rm -r /usr/share/zoneinfo/Canada
RUN echo "America/Sao_Paulo" >  /etc/timezone

ENV TZ America/Sao_Paulo
ENV LANG pt_BR.UTF-8
ENV LANGUAGE pt_BR.UTF-8
ENV LC_ALL pt_BR.UTF-8

ARG JAR_FILE
ADD ${JAR_FILE} /app/
RUN mv /app/${JAR_FILE} /app/app.jar
ENTRYPOINT java $JAVA_OPTS -jar /app/app.jar
Run Code Online (Sandbox Code Playgroud)

  • 按照您的方式删除不需要的文件并不会真正减小图像的大小。如果这是意图,请将它们收集在一次运行中,并在命令之间使用“&&”。 (5认同)