web-dev-qa-db-fra.com

Comment définir les paramètres régionaux dans un conteneur Ubuntu Docker?

J'utilise un conteneur Ubuntu Docker. J'ai un clavier norvégien et je dois utiliser des caractères norvégiens (øæå).

Le codage des caractères de mon terminal est défini sur UTF-8 et je suis connecté à mon conteneur à l'aide de SSH. Cependant, je ne peux pas taper de caractères norvégiens, ni copier-coller de caractères norvégiens ni utiliser CTL + SHIFT + U + 00f8.

J'ai essayé:

locale-gen nb_NO.UTF-8

mais rien n'a changé. Comment définir les paramètres régionaux et le clavier dans un conteneur Docker?

65
mtmacdonald

Mettez dans votre Dockerfile quelque chose d’adapté de 

# Set the locale
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
    locale-gen
ENV LANG en_US.UTF-8  
ENV LANGUAGE en_US:en  
ENV LC_ALL en_US.UTF-8     

cela est extrait du très bon post sur ce sujet, de 

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

102
user2915097

Ceux qui utilisent Debian doivent également installer le paquet locales.

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales

RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
    dpkg-reconfigure --frontend=noninteractive locales && \
    update-locale LANG=en_US.UTF-8

ENV LANG en_US.UTF-8 

Cette réponse m'a beaucoup aidé.

68
mixel

Il suffit d'ajouter 

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8

dans votre Dockerfile. Rien d’autre n’est nécessaire pour l’opération de base . En attendant, locale-gen n’accepte aucun argument, c’est pourquoi aucune des «corrections» qui l’utilise ne fonctionne.

31
andrewsh

En fait, j’ai eu le même problème, mais aucune des réponses fournies ne fonctionne à 100% avec debian: last, même si elles fournissent de bons conseils.

La plus grande différence est que vous devez vous assurer que locales et locales-all sont installés, ce dernier contenant déjà en_US.UTF-8. local-gen ou dpkg-reconfigure.

Voici ce que j'ai fait dans mon Dockerfile pour le faire fonctionner:

FROM debian:latest
RUN apt-get update
RUN apt-get install -y locales locales-all
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
17
Jean

Spécifiez ces variables d'environnement lors de l'exécution de votre commande:

docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>

Il n'est pas nécessaire de modifier le fichier Dockerfile.

8
Dag Høidahl

@ Mixel's answer a bien fonctionné pour l'image de menu fixe basée sur Ubuntu que nous avons.

Cependant, nous avons également une image de menu fixe centos pour tester les recettes via le chef (à l’aide du pilote kitchen-docker). L’un des paquets que nous avons préinstallé n’a pas pu être installé car aucun paramètre régional n’a été défini. Afin d’obtenir une locale installée, je devais exécuter ce qui suit:

localedef -c -f UTF-8 -i en_US en_US.UTF-8
export LC_ALL=en_US.UTF-8

J'ai eu cette information de cette réponse sur ServerFault .

Après avoir exécuté les commandes ci-dessus dans le cadre du menu fixe, le package installé sans aucune erreur. De .kitchen.yml:

platforms:
  - name: centos7
    driver_config:
      image: #(private image)
      platform: centos
      provision_command:
      - localedef -c -f UTF-8 -i en_US en_US.UTF-8
      - export LC_ALL=en_US.UTF-8
1
E. Moffat

Il suffit de regarder à la documentation du conteneur e foruns.

Voici une solution pour debian , ajoutez à votre fichier Dock:

RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
    && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.utf8
0
Eduardo Santana

Vous n'avez pas besoin de ces choses complexes pour définir les paramètres régionaux sur Ubuntu/Debian. Vous n'avez même pas besoin du fichier /etc/local.gen.

Simplement locale-gen fera tout et l'auteur n'a manqué que le paquet locales.

RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
 && locale-gen "en_US.UTF-8"
ENV LANG=en_US.UTF-8 \
    LANGUAGE=en_US:en \
    LC_ALL=en_US.UTF-8

J'ai trouvé cela le plus simple et le plus efficace. Je confirme que cela fonctionne sur Ubuntu 16.04.

0
Bumsik Kim

Je n'aime pas avoir les variables d'environnement Docker lorsque je ne m'attends pas à ce que l'utilisateur d'une image Docker les modifie. Je pense que ce qui suit est beaucoup plus propre:

echo "LC_ALL=en_US.UTF-8" >> /etc/environment

(Edit: Cela ne fonctionne pas. Il semble que je l’ai mal testé au début.)

Il suffit de le mettre quelque part dans une RUN. Si les paramètres régionaux UTF-8 ne sont pas générés, vous pouvez exécuter le jeu de commandes suivant:

export DEBIAN_FRONTEND=noninteractive
apt-get update -q -q
apt-get install --yes locales
locale-gen --no-purge en_US.UTF-8
update-locale LANG=en_US.UTF-8
echo locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8 | debconf-set-selections
echo locales locales/default_environment_locale select en_US.UTF-8 | debconf-set-selections
dpkg-reconfigure locales
0
Mitar

Plutôt que de réinitialiser les paramètres régionaux après l'installation du paquetage locales, vous pouvez répondre aux questions normalement posées (désactivées par noninteractive) avant d'installer le package afin que les scripts de package configurent correctement les paramètres régionaux. Cet exemple définit les paramètres régionaux sur anglais. (Britannique, UTF-8):

RUN echo locales locales/default_environment_locale select en_GB.UTF-8 | debconf-set-selections
RUN echo locales locales/locales_to_be_generated select "en_GB.UTF-8 UTF-8" | debconf-set-selections

RUN \
  apt-get update && \
  DEBIAN_FRONTEND=noninteractive apt-get install -y locales && \
  rm -rf /var/lib/apt/lists/*
0
Matthew Buckett