web-dev-qa-db-fra.com

Docker bash Prompt n'affiche pas la sortie couleur

J'utilise la commande: docker run --rm -it govim bash -l pour exécuter les images Docker mais il n'affiche pas la sortie couleur. Si je source ~/.bash_profile ou exécutez bash -l à nouveau, la sortie sera alors correctement sortie avec la couleur.

Image d'invite Bash

Mon bash_profile et bash_Prompt

21
SolomonT

Le OP SolomonT signale que docker run avec env fonctionne:

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

Et Fernando Correia ajoute dans les commentaires :

Pour obtenir à la fois le support des couleurs et faire fonctionner tmux, j'ai combiné les deux exemples:

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

Comme chepner a commenté (réponse précédente), .bash_profile provient (c'est un Shell interactif), puisque bash_Prompt est appelé par .bash_profile .

Mais problème de docker 9299 illustre que TERM ne semble pas être défini immédiatement, forçant les utilisateurs à ouvrir une autre bash avec:

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

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

Pour illustrer/reproduire le problème :

docker exec -ti $CONTAINER_NAME tty
not a tty

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.

32
VonC

Je pense que c'est quelque chose que vous devez mettre en œuvre manuellement. Mon conteneur a du python, alors voici comment j'imprime en couleur en utilisant une seule ligne:

exemple de fichier docker:

FROM Django:python3
RUN python -c "print('\033[90m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[91m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[92m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[93m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[94m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[95m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[96m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[97m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[98m   HELLO_WORLD   \033[0m')"

terminal standard:

print console colors using terminal command in single line

3
Matt Andrzejczuk

En ajoutant à VonC réponse , j'ai fait 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" "$@"
}
3
David Lord

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 le cli à 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 que tmux fonctionne avec la couleur, dans mon ~/.tmux.conf J'ai besoin:

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

et pour utf8 support 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 crée une image basée sur Fedora 26, la met à jour, installe quelques packages (git, vim, golang et tmux), installe le plugin pathogène pour vim, puis installe un dépôt git à partir d'ici vim-go- ide et fait enfin quelques ajustements à quelques fichiers de configuration pour que la couleur et l'utf8 fonctionnent correctement. Il 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 une instruction Dockerfile avec ENV et ajoutez les commandes pour modifier les fichiers de configuration dans une instruction RUN sans le commandes d'installation et utilisez votre image de base dans l'instruction FROM. Je préfère cette solution car je suis paresseux et (en plus de la configuration initiale), il enregistre la saisie lorsque vous souhaitez exécuter l'image.

tilisation de vim et de plugins dans tmux

2
Edge-Case