3
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/

2 Answers 2

6

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/^#//'
2
  • > 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. Commented Mar 5, 2019 at 16:47
  • Then this line is useless if the file didn't exist... the line is mean to add the en_US locale with the command below (locale-gen) Commented Dec 4, 2023 at 22:45
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"

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .