Set locale in debian stretch in Dockerfile for any user

2

RUN apt-get update && \
    # Install locales
    apt-get install -y locales && \
    # Set locale
    sed --in-place '/en_US.UTF-8/s/^# //' /etc/locale.gen && \
    locale-gen && \
    # Set system locale (add line)
    echo "export LANG=en_US.UTF-8" >> /etc/profile && \
    # Set system timezone (add line)
    echo "export TZ=UTC" >> /etc/profile && \
    # If the user will not change, we must source
    source /etc/profile

I use the image in my GitLab pipeline and the follow is is displayed:

$ cat /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
export LANG=en_US.UTF-8
export TZ=UTC
$ 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=

If someone could explain how locale actually works in debian. I've read other answers only for Ubuntu: https://stackoverflow.com/questions/28405902/how-to-set-the-locale-inside-a-docker-container http://jaredmarkell.com/docker-and-locales/

Karl Morrison

Posted 2018-03-08T14:17:52.033

Reputation: 1 507

Answers

4

Explained there : http://jaredmarkell.com/docker-and-locales/

According this site and your links the locales are defined into the Dockerfiles by these directives :

RUN locale-gen en_US.UTF-8  
ENV LANG en_US.UTF-8  
ENV LANGUAGE en_US:en  
ENV LC_ALL en_US.UTF-8  

Ubuntu is on only debian derivative and docker integration is quite similar into both distros.

Also take care of sed into the first file, you just have to uncomment (removing the space is not mandatory)

sed --in-place '/en_US.UTF-8/s/^#//'

Bertrand Cebador

Posted 2018-03-08T14:17:52.033

Reputation: 56

ockquote>

Also take care of sed into the first file, you just have to uncomment (removing the space is not mandatory)

Ok. which first file? /etc/locale.gen didn't exists on debian:stretch-slim image. – Manoel Vilela – 2019-03-05T16:47:16.637

0

"apt install locales-all" is necessary if not install locales-all will display "Cannot Set LC_ALL to default locale: No such file or directory"

Jagger Yu

Posted 2018-03-08T14:17:52.033

Reputation: 1