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.
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.
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:
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" "$@"
}
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.