Sulla base della risposta di VonC, aggiungo quanto segue al mio Dockerfile (che mi consente di eseguire il contenitore senza digitare ogni volta le variabili di ambiente sulla riga di comando):
ENV TERM xterm-256color
#... more stuff
CMD ["bash", "-l"]
E sicuramente funziona con:
docker run -it my-image:tag
Per tmux
lavorare con il colore, nel mio ~/.tmux.conf
Ho bisogno di:
set -g default-terminal "screen-256color"
e per il supporto UTF-8 in tmux
, nel mio ~/.bashrc
:
alias tmux='tmux -u'
Il mio file Docker:
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"]
Il Dockerfile crea un'immagine basata su Fedora 26, la aggiorna, installa alcuni pacchetti (Git, Vim, golang e tmux), installa il plugin patogeno per Vim, quindi installa un repository Git da qui vim-go-ide e infine lo fa alcune modifiche ad alcuni file di configurazione per far funzionare bene il colore e UTF-8. Devi solo aggiungere spazio di archiviazione persistente, probabilmente montato in /app/go.
Se hai un'immagine con tutti gli strumenti di sviluppo già installati, crea semplicemente un Dockerfile
con ENV
istruzione e aggiungere i comandi per modificare i file di configurazione in un RUN
istruzione senza i comandi di installazione e usa la tua immagine di base nel FROM
dichiarazione. Preferisco questa soluzione perché sono pigro e (oltre alla configurazione iniziale) risparmia la digitazione quando vuoi eseguire l'immagine.
Utilizzo di Vim e plugin all'interno di tmux
L'aggiunta di -t funziona per me:
docker exec -t vendor/bin/phpunit
In aggiunta alla risposta di VonC, ho creato questa funzione 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 riporta che docker run
con env
funzionano:
docker run --rm -it -e "TERM=xterm-256color" govim bash -l
E Fernando Correia aggiunge nei commenti:
Per ottenere sia il supporto del colore che creare
tmux
lavoro, ho combinato entrambi gli esempi:
docker exec -it my-container env TERM=xterm-256color script -q -c "/bin/bash" /dev/null
Come ha commentato chepner (risposta precedente), .bash_profile
è originato (è una shell interattiva), poiché bash_prompt
è chiamato da .bash_profile
.
Ma il problema docker 9299 illustra che TERM
non sembra essere impostato subito, costringendo gli utenti ad aprire un'altra bash con:
docker exec -ti test env TERM=xterm-256color bash -l
Hai problemi di colore simili con il numero 8755.
Per illustrare/riprodurre il problema:
docker exec -ti $CONTAINER_NAME tty
not a tty
La soluzione attuale è :
docker exec -ti `your_container_id` script -q -c "/bin/bash" /dev/null
Entrambi suppongono che tu abbia prima un contenitore in esecuzione, il che potrebbe non essere conveniente qui.