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.