Set locale in debian stretch in Dockerfile for any user

6,393

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/^#//'
Share:
6,393

Related videos on Youtube

Karl Morrison
Author by

Karl Morrison

deusexmachina.

Updated on September 18, 2022

Comments

  • Karl Morrison
    Karl Morrison over 1 year
    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/

  • Manoel Vilela
    Manoel Vilela about 5 years
    > 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.