Docker bash提示符不显示颜色输出

Sol*_*onT 24 linux bash shell docker

我使用命令:docker run --rm -it govim bash -l运行docker图像,但它不显示颜色输出.如果我source ~/.bash_profilebash -l再次运行,输出将正确输出颜色.

Bash提示图像

我的bash_profile和bash_prompt

Von*_*onC 33

OP SolomonT报告说,docker runenv做的工作:

docker run --rm -it -e "TERM=xterm-256color" govim bash -l
Run Code Online (Sandbox Code Playgroud)

费尔南多·科雷亚增加的评论:

为了获得颜色支持并使tmux工作,我结合了两个例子:

docker exec -it my-container env TERM=xterm-256color script -q -c "/bin/bash" /dev/null
Run Code Online (Sandbox Code Playgroud)

正如chepner所评论的(早期答案),tmux源自(它是一个交互式shell),因为.bash_profile称为bash_prompt.

Docker问题9299说明.bash_profile似乎没有立即设置,迫使用户打开另一个bash:

docker exec -ti test env TERM=xterm-256color bash -l
Run Code Online (Sandbox Code Playgroud)

问题8755有类似的颜色问题.

为了说明/重现问题:

docker exec -ti $CONTAINER_NAME tty
not a tty
Run Code Online (Sandbox Code Playgroud)

当前的解决方法是:

docker exec -ti `your_container_id` script -q -c "/bin/bash" /dev/null
Run Code Online (Sandbox Code Playgroud)

两者都假设你首先有一个正在运行的容器,这在这里可能不方便.

  • 我阅读了您列出的所有链接,并发现当使用 env TERM="xterm-256color" 运行 docker 时,我的 bash 提示符再次显示颜色。太感谢了。 (2认同)
  • 为了获得颜色支持并使 tmux 工作,我结合了两个示例: docker exec -it my-container env TERM=xterm script -q -c "/bin/bash" /dev/null` (2认同)
  • @FernandoCorreia 谢谢。我已将您的评论包含在答案中以获得更多可见性。 (2认同)

Sai*_*han 21

添加 -t 对我有用:

docker exec -t vendor/bin/phpunit
Run Code Online (Sandbox Code Playgroud)


小智 10

根据VonC 的回答,我将以下内容添加到我的 Dockerfile(这使我可以运行容器而无需每次在命令行上键入环境变量):

ENV TERM xterm-256color
#... more stuff
CMD ["bash", "-l"]
Run Code Online (Sandbox Code Playgroud)

果然它适用于:

docker run -it my-image:tag
Run Code Online (Sandbox Code Playgroud)

为了tmux使用颜色,~/.tmux.conf我需要:

set -g default-terminal "screen-256color"
Run Code Online (Sandbox Code Playgroud)

对于 UTF-8 支持tmux,在我的~/.bashrc

alias tmux='tmux -u'
Run Code Online (Sandbox Code Playgroud)

我的 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"]
Run Code Online (Sandbox Code Playgroud)

Dockerfile 基于Fedora 26构建一个镜像,更新它,安装一些包(Git、Vim、golang 和 tmux),安装 Vim 的病原体插件,然后从这里安装一个 Git 存储库vim-go-ide,最后执行对一些配置文件进行一些调整以使颜色和 UTF-8 正常工作。您只需要添加持久存储,可能安装在 /app/go 下。

如果你有一个已经安装了所有开发工具的镜像,只需创建一个DockerfilewithENV语句并在RUN没有安装命令的语句中添加修改配置文件的命令,并在FROM语句中使用你的基础镜像。我更喜欢这个解决方案,因为我很懒惰并且(除了初始设置)它可以在您想要运行图像时节省输入。

在 tmux 中使用 Vim 和插件