GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Die Docker-Bash-Eingabeaufforderung zeigt keine Farbausgabe an

Basierend auf der Antwort von VonC füge ich meiner Docker-Datei Folgendes hinzu (was es mir ermöglicht, den Container auszuführen, ohne jedes Mal die Umgebungsvariablen in die Befehlszeile einzugeben):

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

Und tatsächlich funktioniert es mit:

docker run -it my-image:tag

Für tmux um mit Farbe zu arbeiten, in meinem ~/.tmux.conf Ich brauche:

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

und für UTF-8-Unterstützung in tmux , in meinem ~/.bashrc :

alias tmux='tmux -u'

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

Das Dockerfile erstellt ein Image basierend auf Fedora 26, aktualisiert es, installiert ein paar Pakete (Git, Vim, golang und tmux), installiert das Pathogen-Plugin für Vim, installiert dann ein Git-Repository von hier aus vim-go-ide und tut es schließlich ein paar Änderungen an einigen Konfigurationsdateien, damit Farbe und UTF-8 gut funktionieren. Sie müssen nur dauerhaften Speicher hinzufügen, der wahrscheinlich unter /app/go gemountet ist.

Wenn Sie ein Image mit allen bereits installierten Entwicklungstools haben, erstellen Sie einfach einen Dockerfile mit ENV -Anweisung und fügen Sie die Befehle zum Ändern der Konfigurationsdateien in einem RUN hinzu -Anweisung ohne die Installationsbefehle und verwenden Sie Ihr Basis-Image in FROM Aussage. Ich bevorzuge diese Lösung, weil ich faul bin und (neben der anfänglichen Einrichtung) das Tippen erspart, wenn Sie das Bild ausführen möchten.

Verwendung von Vim und Plugins innerhalb von tmux


Hinzufügen von -t funktioniert bei mir:

docker exec -t vendor/bin/phpunit

Ergänzend zur Antwort von VonC habe ich diese Bash-Funktion erstellt:

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

Das OP SolomonT meldet, dass docker run mit env arbeiten:

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

Und Fernando Correia fügt in den Kommentaren hinzu:

Um sowohl Farbunterstützung zu erhalten als auch tmux zu machen funktioniert, habe ich beide Beispiele kombiniert:

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

Wie Chepner kommentierte (frühere Antwort), .bash_profile wird seit bash_prompt bezogen (es handelt sich um eine interaktive Shell). wird von .bash_profile aufgerufen .

Aber das Docker-Problem 9299 veranschaulicht das TERM scheint nicht sofort gesetzt zu sein, was die Benutzer dazu zwingt, eine weitere Bash zu öffnen mit:

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

Sie haben ähnliche Farbprobleme mit Ausgabe 8755.

Zur Veranschaulichung/Wiedergabe des Problems:

docker exec -ti $CONTAINER_NAME tty
not a tty

Die aktuelle Problemumgehung lautet:

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

Beide setzen voraus, dass Sie zuerst einen laufenden Container haben, was hier möglicherweise nicht bequem ist.


Linux
  1. [Behoben] bash:sudo:Befehl nicht gefunden

  2. Wie entscheidet ein Programm, ob es eine farbige Ausgabe haben soll oder nicht?

  3. Warum enthält die Bash-Übersetzungsdatei nicht alle Fehlertexte?

  4. „Schwanz -f | Iconv -fsjis“ gibt nichts aus?

  5. Rm-Befehl im Bash-Skript funktioniert nicht mit Variablen?

Bash:In Datei schreiben

Anzeige der Bash-Eingabeaufforderung Hh:mm:ss?

Was macht 'bash -c'?

Conda-Befehl funktioniert in der Eingabeaufforderung, aber nicht im Bash-Skript

Wie stelle ich die Farbe der Eingabeaufforderung in Bash ein?

Hat Bash einen Farbbefehl, wie in MS-Windows CMD zu sehen?