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?
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
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é.
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.
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
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.
@ 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
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
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.
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
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/*