Запрос Docker bash не отображает цветную информацию
Я использую команду: docker run --rm -it govim bash -l
для запуска изображений докера, но он не отображает цветной вывод. Если я использую source ~/.bash_profile
или снова запускаю bash -l
, вывод будет корректно выводиться с цветом.
Bash Prompt Image
Мой bash_profile и bash_prompt
Ответы
Ответ 1
OP SolomonT сообщает, что docker run
с env
и работает:
docker run --rm -it -e "TERM=xterm-256color" govim bash -l
И Фернандо Коррейя добавляет в комментариях:
Чтобы получить поддержку цвета и заставить работать tmux
, я объединил оба примера:
docker exec -it my-container env TERM=xterm-256color script -q -c "/bin/bash" /dev/null
Как прокомментировал Чепнер (предыдущий ответ), .bash_profile
поставляется (это интерактивная оболочка), так как bash_prompt
вызывается .bash_profile
.
Но проблема с докером 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
Оба предполагают, что сначала у вас есть работающий контейнер, что может быть неудобно.
Ответ 2
Добавив в 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" "[email protected]"
}
Ответ 3
Я думаю, что это то, что вам нужно было бы реализовать вручную. Мой контейнер имеет python, поэтому здесь, как я печатаю по цвету с помощью одной строки:
пример файла докеров:
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')"
стандартный терминал:
![цвета консоли печати с помощью команды терминала в одной строке]()
Ответ 4
На основе ответа @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"
и для поддержки utf8
в tmux
, в моем ~/.bashrc
:
alias tmux='tmux -u'
My 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), устанавливает плагин pathogen для vim, затем устанавливает здесь git репо vim-go-ide и, наконец, несколько настроек к нескольким конфигурационным файлам, чтобы получить цвет и работу utf8. Просто нужно добавить постоянное хранилище, возможно, установленное под /app/go.
Если у вас есть изображение со всеми уже установленными инструментами разработки, просто создайте оператор Dockerfile
с ENV
и добавьте команды для изменения конфигурационных файлов в инструкции RUN
без команд установки и используйте свою базу изображения в инструкции FROM
. Я предпочитаю это решение, потому что я ленив и (помимо начальной настройки), он сохраняет ввод текста, когда вы хотите запустить изображение.
Использование vim и плагинов в tmux