2015-11-03 12 views
15

I comando di utilizzo: docker run --rm -it govim bash -l per eseguire immagini di finestra mobile ma non visualizza l'output a colori. Se I o esegui di nuovo bash -l, l'output verrà quindi correttamente emesso con il colore.Il prompt docker bash non visualizza l'output a colori

Bash Prompt Image

My bash_profile and bash_prompt

+0

Cosa succede se si sorgente '.bash_prompt' da' .bashrc' (dove hai usato per impostare 'PS1' manualmente, invece di' .bash_profile'? (Questo è tecnicamente più corretto, potresti voler impostare 'PS1' per una shell interattiva che non sia anche una shell di login.) – chepner

risposta

21

Le OP SolomonT rapporti che docker run con env funzionano:

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

E Fernando Correia aggiunge in the comments:

ottenere sia il supporto del colore e fare tmux lavoro, ho unito due esempi:

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

Come chepner commentato (precedente risposta), .bash_profile proviene (itis una shell interattiva), dal momento che bash_prompt è called by .bash_profile.

Ma docker issue 9299 illustra che TERM non sembra essere impostato subito, costringendo gli utenti ad aprire un altro bash con:

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

avete problemi di colore simili con issue 8755.

Per illustrate/reproduce the problem:

docker exec -ti $CONTAINER_NAME tty 
not a tty 

Il current workaround è:

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

Entrambi sono supponendo di avere un contenitore in esecuzione prima, che potrebbe non essere conveniente qui.

+1

Ho letto tutto il link che hai elencato e lo scopri quando eseguo la finestra mobile con env TERM =" xterm-256color " , il mio prompt di bash mostra nuovamente il colore. Grazie mille. – SolomonT

+1

@SolomonT Great! Ho incluso il tuo commento nella risposta per maggiore visibilità. Puoi recensirlo? – VonC

+0

sì, è corretto. – SolomonT

3

Aggiungendo a VonC di answer, ho fatto 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]" 
} 
1

Sulla base @ risposta di VonC ho aggiungendo quanto segue alla mia Dockerfile (che mi permette di correre il contenitore senza digitare le variabili di ambiente sul cli ogni volta):

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

e abbastanza sicuro che funziona con:

docker run -it my-image:tag 

Per tmux a lavorare con il colore, a mio ~/.tmux.conf ho bisogno:

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

e per utf8 supporto tmux, nel mio ~/.bashrc:

alias tmux='tmux -u' 

mio 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"] 

Il Dockerfile crea un'immagine basata su Fedora 26, lo aggiorna, installa alcuni p ackages (git, vim, golang e tmux), installa il plugin pathogen per vim, quindi installa un repo git da qui vim-go-ide e infine fa qualche modifica ad alcuni file di configurazione per ottenere il colore e utf8 funzionante. Basta aggiungere memoria persistente, probabilmente montata sotto/app/go.

Se si dispone di un'immagine con tutti gli strumenti di sviluppo già installati, basta fare un Dockerfile con ENV dichiarazione e aggiungere i comandi per modificare i file di configurazione in un comunicato RUN senza i comandi di installazione e utilizzare l'immagine di base nella dichiarazione FROM . Preferisco questa soluzione perché sono pigro e (oltre alla configurazione iniziale) consente di salvare la digitazione quando si desidera eseguire l'immagine.

Using vim and plugins within tmux

0

penso che questo è qualcosa che si sarebbe necessario implementare manualmente. Il mio contenitore ha python, quindi ecco come ho stampa a colori utilizzando una sola riga:

file di esempio finestra mobile:

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')" 

terminale standard:

print console colors using terminal command in single line

Problemi correlati