GNU/Linux >> Znalost Linux >  >> Linux

Výzva Docker bash nezobrazuje barevný výstup

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é.


Linux
  1. Proč substituce procesu Bash nefunguje s některými příkazy?

  2. Jak se program rozhodne, zda bude či nebude mít barevný výstup?

  3. Příkaz Rm ve skriptu Bash nefunguje s proměnnou?

  1. příkaz docker nebyl nalezen

  2. Co dělá 'bash -c'?

  3. Proč kontejner dockeru zobrazí výzvu Permission denied?

  1. Shoda vzoru nefunguje ve skriptu bash

  2. Jak nastavit barvu příkazového řádku v Bash?

  3. Jak zobrazit aktuální cestu v příkazovém řádku v linuxovém sh (ne bash)?