web-dev-qa-db-ja.com

Docker bashプロンプトにカラー出力が表示されない

コマンドdocker run --rm -it govim bash -lを使用してdockerイメージを実行しますが、カラー出力を表示しません。 I source ~/.bash_profileまたはbash -lを再度実行すると、出力は色付きで正しく出力されます。

バッシュプロンプトイメージ

私のbash_profileとbash_Prompt

21
SolomonT

OP SolomonT は、 docker run with env が機能することを報告します。

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

Fernando Correiaをコメントに追加します

色のサポートを取得し、tmuxを機能させるために、両方の例を組み合わせました。

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

chepner コメント(以前の回答)として、 .bash_profileと呼ばれるため、bash_Promptがソースになります(インタラクティブシェル)。 .bash_profile によって。

しかし、 docker issue 9299 は、TERMがすぐに設定されていないように見えることを示しており、ユーザーは次の方法で別のbashを開く必要があります。

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

issue 8755 で同様の色の問題があります。

問題を説明/再現するには

docker exec -ti $CONTAINER_NAME tty
not a tty

現在の回避策 は次のとおりです。

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

両方とも、最初に実行中のコンテナがあると仮定していますが、ここでは便利ではないかもしれません。

32
VonC

これは手動で実装する必要があるものだと思います。私のコンテナにはpythonがあるので、1行を使用してカラーで印刷する方法を次に示します。

例dockerファイル:

FROM Django:python3
RUN python -c "print('\033[90m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[91m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[92m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[93m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[94m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[95m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[96m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[97m   HELLO_WORLD   \033[0m')"
RUN python -c "print('\033[98m   HELLO_WORLD   \033[0m')"

標準端末:

print console colors using terminal command in single line

3

VonCの answer に追加して、この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" "$@"
}
3
David Lord

@VonCの答えに基づいて、次をDockerfileに追加します(これにより、cliで環境変数を毎回入力せずにコンテナーを実行できます)。

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

そして、それが十分に動作することを確認してください:

docker run -it my-image:tag

tmuxが私の~/.tmux.conf 私は欲しい:

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

およびutf8tmuxでのサポート、私の~/.bashrc

alias tmux='tmux -u'

私の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"]

DockerfileはFedora 26に基づいてイメージを構築し、更新し、いくつかのパッケージ(git、vim、golang、tmux)をインストールし、vimの病原体プラグインをインストールします。次に、ここからgitリポジトリをインストールします vim-go- ide そして最後に、色とutf8が正常に機能するように、いくつかの設定ファイルをいくつか調整します。おそらく/ app/goの下にマウントされた永続ストレージを追加する必要があります。

すべての開発ツールがすでにインストールされたイメージがある場合は、Dockerfile with ENVステートメントを作成し、RUNステートメントの設定ファイルを変更するコマンドを追加します。 FROMステートメントでベースイメージを使用します。私はこのソリューションが好きです。なぜなら、私は怠け者であり(初期セットアップ以外に)、イメージを実行するときに入力を節約できるからです。

tmux内でvimとプラグインを使用

2
Edge-Case