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.