Na základě odpovědi VonC přidávám do svého souboru Dockerfile následující (což mi umožňuje spustit kontejner, aniž bych pokaždé zadával proměnné prostředí na příkazový řádek):
ENV TERM xterm-256color
#... more stuff
CMD ["bash", "-l"]
A určitě to funguje s:
docker run -it my-image:tag
Pro tmux
pro práci s barvou v mém ~/.tmux.conf
Potřebuji:
set -g default-terminal "screen-256color"
a pro podporu UTF-8 v tmux
, v mém ~/.bashrc
:
alias tmux='tmux -u'
Můj soubor 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"]
Dockerfile vytvoří obraz založený na Fedoře 26, aktualizuje jej, nainstaluje několik balíčků (Git, Vim, golang a tmux), nainstaluje patogenní plugin pro Vim, poté nainstaluje úložiště Git odtud vim-go-ide a nakonec provede několik úprav v několika konfiguračních souborech, aby barvy a UTF-8 fungovaly dobře. Stačí přidat trvalé úložiště, pravděpodobně připojené pod /app/go.
Pokud máte obraz se všemi nainstalovanými vývojovými nástroji, vytvořte Dockerfile
s ENV
a přidejte příkazy pro úpravu konfiguračních souborů v RUN
bez instalačních příkazů a použijte svůj základní obraz v FROM
tvrzení. Dávám přednost tomuto řešení, protože jsem líný a (kromě počátečního nastavení) šetří psaní, když chcete spustit obrázek.
Používání Vimu a pluginů v tmux
Přidání -t mi funguje:
docker exec -t vendor/bin/phpunit
Přidáním k odpovědi VonC jsem vytvořil tuto funkci 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]"
}
OP SolomonT uvádí, že docker run
s env
dělat práci:
docker run --rm -it -e "TERM=xterm-256color" govim bash -l
A Fernando Correia v komentářích dodává:
Chcete-li získat podporu barev a vytvořit
tmux
práce, spojil jsem oba příklady:
docker exec -it my-container env TERM=xterm-256color script -q -c "/bin/bash" /dev/null
Jak poznamenal chepner (dřívější odpověď), .bash_profile
je zdrojový (jedná se o interaktivní shell), od bash_prompt
je voláno .bash_profile
.
Ale problém s dockerem 9299 ukazuje, že TERM
Zdá se, že není nastaven hned, což nutí uživatele otevřít další bash pomocí:
docker exec -ti test env TERM=xterm-256color bash -l
Máte podobné problémy s barvami s číslem 8755.
Pro ilustraci/reprodukci problému:
docker exec -ti $CONTAINER_NAME tty
not a tty
Aktuální řešení je:
docker exec -ti `your_container_id` script -q -c "/bin/bash" /dev/null
Oba předpokládají, že máte nejprve spuštěný kontejner, což zde nemusí být vhodné.