[英]Docker Bash prompt does not display color output
我使用命令docker run --rm -it govim bash -l
來運行 Docker 映像,但它不顯示顏色輸出。
如果我source ~/.bash_profile
或再次運行bash -l
,則輸出將正確地以顏色輸出。
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
語句中使用你的基礎鏡像。 我更喜歡這個解決方案,因為我很懶,而且(除了初始設置之外)它可以在您想要運行圖像時節省輸入。
添加 -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.