我有一个用于 MySQL 数据库的 Docker 容器,我需要修复其中的区域设置问题。当我在 docker 镜像中执行 locale 命令时,得到以下结果:
# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
我想将其更改为UTF-8,因为当前的配置可能会导致问题。 这是 Dockerfile:
FROM mysql:8.0.33-debian
COPY mysql-repository.gpg mysql-repository.gpg
RUN apt-key add mysql-repository.gpg
RUN apt-get update && apt-get install -y dirmngr gpg curl gawk git python3 python3-venv locales
RUN git clone https://github.com/asdf-vm/asdf.git $HOME/.asdf --branch v0.11.1
RUN echo ". $HOME/.asdf/asdf.sh" >> $HOME/.bashrc
RUN sed -i '/C.UTF-8/s/^# //g' /etc/locale.gen && \
locale-gen
ENV LANG C.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL C.UTF-8
WORKDIR /root
COPY install_asdf_packages.sh install_asdf_packages.sh
COPY .tool-versions .tool-versions
RUN bash -l install_asdf_packages.sh
RUN echo 'export PATH=/root/.venv/bin:${PATH}' >> $HOME/.bashrc
COPY tws.cnf /etc/mysql/conf.d/tws.cnf
RUN chmod 644 /etc/mysql/conf.d/tws.cnf
WORKDIR /
COPY db-transfer.sh db-transfer.sh
RUN chmod +x db-transfer.sh
ENTRYPOINT [ "./db-transfer.sh" ]
如何将语言环境更改为 UTF-8? RUN sed -i 命令和设置 ENV 值没有改变任何东西。
试试这个。
...
ENV LC_ALL=en_US.UTF-8
ENV LANG=en_US
RUN apt-get update && apt-get install -y locales
RUN printf '%s\n' LANG=en_US LC_ALL=en_US.UTF-8 >/etc/default/locale
RUN echo en_US.UTF-8 UTF-8 >>/etc/locale.gen
RUN locale-gen
我开始写一个涉及
dpkg-reconfigure locales
的答案,但事实证明,这个问题存在多个错误,多年来一直没有解决。
# FIXME: broken
RUN printf '%s\t%s\t%s\t%s\n' \
locales locales/locales_to_be_generated \
multiselect "en_US.UTF-8 UTF-8" \
locales locales/default_environment_locale \
select "en_US.UTF8" | \
debconf-set-selections && \
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure locales
安装完
locales
后,很明显。