GNU/Linux >> Linux Esercitazione >  >> Linux

Il prompt bash di Docker non visualizza l'output a colori

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.


Linux
  1. [Risolto] bash:sudo:comando non trovato

  2. "nohup Sudo ..." non richiede Passwd e non fa nulla?

  3. Perché il file di traduzione Bash non contiene tutti i testi di errore?

  4. Visualizzazione prompt Bash Hh:mm:ss?

  5. Cosa fa 'bash -c'?

Bash:Scrivi su file

Qt non crea file di output nelle cartelle di debug/rilascio in Linux

Perché il contenitore docker richiede Autorizzazione negata?

La corrispondenza del modello non funziona nello script bash

Come visualizzare il percorso corrente nel prompt dei comandi in sh di Linux (non bash)?

Bash ha un comando di colore, come visto in MS-Windows CMD?