簡體   English   中英

Docker Bash 提示不顯示顏色輸出

[英]Docker Bash prompt does not display color output

我使用命令docker run --rm -it govim bash -l來運行 Docker 映像,但它不顯示顏色輸出。

如果我source ~/.bash_profile或再次運行bash -l ,則輸出將正確地以顏色輸出。

Bash 提示圖像

我的 bash_profile 和 bash_prompt文件。

OP SolomonT 報告說 docker 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_prompt .bash_profile

但是docker issue 9299說明TERM似乎沒有立即設置,迫使用戶打開另一個 bash:

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

您對問題 8755有類似的顏色問題。

為了說明/重現問題

docker exec -ti $CONTAINER_NAME tty
not a tty

當前的解決方法是:

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

兩者都假設您首先有一個正在運行的容器,這在這里可能不方便。

根據VonC 的回答,我將以下內容添加到我的 Dockerfile 中(這允許我運行容器而無需每次都在命令行上鍵入環境變量):

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

果然它適用於:

docker run -it my-image:tag

為了讓tmux使用顏色,在我的~/.tmux.conf中我需要:

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

對於tmux中的 UTF-8 支持,在我的~/.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 的病原體插件,然后從這里vim-go-ide安裝一個 Git 存儲庫,最后完成對一些配置文件進行一些調整,以使顏色和 UTF-8 正常工作。 您只需要添加持久存儲,可能安裝在 /app/go 下。

如果你有一個已經安裝了所有開發工具的鏡像,只需使用ENV語句創建一個Dockerfile ,並在沒有安裝命令的RUN語句中添加修改配置文件的命令,並在FROM語句中使用你的基礎鏡像。 我更喜歡這個解決方案,因為我很懶,而且(除了初始設置之外)它可以在您想要運行圖像時節省輸入。

在 tmux 中使用 Vim 和插件

添加 -t 對我有用:

docker exec -t vendor/bin/phpunit

添加到VonC 的答案,我做了這個 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" "$@"
}

我認為這是您必須手動實現的。 我的容器有 Python,所以這是我使用單行進行彩色打印的方法:

示例 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')"

標准端子:

在一行中使用終端命令打印控制台顏色

您需要將以下行添加到 Dockerfile:

RUN echo PS1="'"'\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\ \033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '"'" >> /app/.bashrc

/app/.bashrc更改為.bashrc文件在 docker 中的位置。

如果您希望ls命令也具有顏色,請添加以下行:

RUN echo alias ls="'"'ls --color=auto'"'" >> /app/.bashrc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM