GNU/Linux >> Tutoriels Linux >  >> Linux

L'invite Docker bash n'affiche pas la sortie couleur

Sur la base de la réponse de VonC, j'ajoute ce qui suit à mon Dockerfile (ce qui me permet d'exécuter le conteneur sans taper les variables d'environnement sur la ligne de commande à chaque fois) :

ENV TERM xterm-256color
#... more stuff
CMD ["bash", "-l"]

Et bien sûr, cela fonctionne avec :

docker run -it my-image:tag

Pour tmux travailler la couleur, dans mon ~/.tmux.conf J'ai besoin :

set -g default-terminal "screen-256color"

et pour le support UTF-8 dans tmux , dans mon ~/.bashrc :

alias tmux='tmux -u'

Mon Dockerfile :

FROM fedora:26
ENV TERM xterm-256color
RUN dnf upgrade -y && \
    dnf install golang tmux git vim -y && \
    mkdir -p /app/go/{bin,pkg,src} && \
    echo 'export GOPATH=/app/go' >> $HOME/.bashrc && \
    echo 'export PATH=$PATH:$GOPATH/bin' >> $HOME/.bashrc && \
    mkdir -p ~/.vim/autoload ~/.vim/bundle && \
    curl -LSso ~/.vim/autoload/pathogen.vim \
        https://tpo.pe/pathogen.vim && \
    git clone https://github.com/farazdagi/vim-go-ide.git \
        ~/.vim_go_runtime && \
    bash ~/.vim_go_runtime/bin/install && \
    echo "alias govim='vim -u ~/.vimrc.go'" >> ~/.bashrc && \
    echo "alias tmux='tmux -u'" >> ~/.bashrc && \
    echo 'set -g default-terminal "screen-256color"' >> ~/.tmux.conf

CMD ["bash", "-l"]

Le Dockerfile construit une image basée sur Fedora 26, la met à jour, installe quelques packages (Git, Vim, golang et tmux), installe le plugin pathogen pour Vim, puis installe un référentiel Git à partir d'ici vim-go-ide et enfin fait quelques ajustements à quelques fichiers de configuration pour que la couleur et l'UTF-8 fonctionnent correctement. Il vous suffit d'ajouter un stockage persistant, probablement monté sous /app/go.

Si vous avez une image avec tous les outils de développement déjà installés, faites simplement un Dockerfile avec ENV et ajoutez les commandes pour modifier les fichiers de configuration dans un RUN sans les commandes d'installation et utilisez votre image de base dans le FROM déclaration. Je préfère cette solution car je suis paresseux et (en plus de la configuration initiale) cela évite de taper lorsque vous voulez exécuter l'image.

Utilisation de Vim et des plugins dans tmux


L'ajout de -t fonctionne pour moi :

docker exec -t vendor/bin/phpunit

En plus de la réponse de VonC, j'ai créé cette fonction Bash :

drun() { # start container with the specified entrypoint and colour terminal
    if [[ $# -lt 2 ]]; then
        echo "drun needs 2+ arguments: image entrypoint" >&2
        return
    fi
    docker run -ti -e "TERM=xterm-256color" "[email protected]"
}

L'OP SolomonT rapporte que docker run avec env travailler :

docker run --rm -it -e "TERM=xterm-256color" govim bash -l

Et Fernando Correia ajoute dans les commentaires :

Pour obtenir le support des couleurs et faire tmux travail, j'ai combiné les deux exemples :

docker exec -it my-container env TERM=xterm-256color script -q -c "/bin/bash" /dev/null

Comme l'a commenté chepner (réponse précédente), .bash_profile est sourcé (c'est un shell interactif), depuis bash_prompt est appelé par .bash_profile .

Mais le problème docker 9299 illustre que TERM ne semble pas être défini tout de suite, obligeant les utilisateurs à ouvrir un autre bash avec :

docker exec -ti test env TERM=xterm-256color bash -l

Vous avez des problèmes de couleur similaires avec le problème 8755.

Pour illustrer/reproduire le problème :

docker exec -ti $CONTAINER_NAME tty
not a tty

La solution de contournement actuelle est :

docker exec -ti `your_container_id` script -q -c "/bin/bash" /dev/null

Les deux supposent que vous avez d'abord un conteneur en cours d'exécution, ce qui pourrait ne pas être pratique ici.


Linux
  1. [Corrigé] bash :sudo :commande introuvable

  2. Pourquoi le fichier de traduction Bash ne contient-il pas tous les textes d'erreur ?

  3. La commande Rm dans le script Bash ne fonctionne pas avec la variable ?

  4. Affichage de l'invite Bash Hh:mm:ss ?

  5. commande docker introuvable

Bash :Écrire dans un fichier

Pourquoi le conteneur Docker invite-t-il l'autorisation refusée ?

La correspondance de modèle ne fonctionne pas dans le script bash

Comment définir la couleur de l'invite de commande dans Bash ?

Comment afficher le chemin actuel dans l'invite de commande dans le sh (pas bash) de Linux ?

Que signifie exactement le périphérique d'entrée n'est pas un TTY dans la sortie d'exécution du docker ?