Según la respuesta de VonC, agrego lo siguiente a mi Dockerfile (que me permite ejecutar el contenedor sin tener que escribir las variables de entorno en la línea de comando cada vez):
ENV TERM xterm-256color
#... more stuff
CMD ["bash", "-l"]
Y efectivamente, funciona con:
docker run -it my-image:tag
Para tmux
para trabajar con color, en mi ~/.tmux.conf
Necesito:
set -g default-terminal "screen-256color"
y para compatibilidad con UTF-8 en tmux
, en mi ~/.bashrc
:
alias tmux='tmux -u'
Mi 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 crea una imagen basada en Fedora 26, la actualiza, instala algunos paquetes (Git, Vim, golang y tmux), instala el complemento de patógenos para Vim, luego instala un repositorio de Git desde aquí vim-go-ide y finalmente lo hace algunos ajustes a algunos archivos de configuración para que el color y UTF-8 funcionen bien. Solo necesita agregar almacenamiento persistente, probablemente montado en /app/go.
Si tiene una imagen con todas las herramientas de desarrollo ya instaladas, simplemente haga un Dockerfile
con ENV
instrucción y agregue los comandos para modificar los archivos de configuración en un RUN
declaración sin los comandos de instalación y use su imagen base en el FROM
declaración. Prefiero esta solución porque soy vago y (además de la configuración inicial) ahorra escribir cuando quieres ejecutar la imagen.
Usando Vim y complementos dentro de tmux
Agregar -t funciona para mí:
docker exec -t vendor/bin/phpunit
Agregando a la respuesta de VonC, hice esta función 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]"
}
El OP SolomonT informa que docker run
con env
trabajar:
docker run --rm -it -e "TERM=xterm-256color" govim bash -l
Y Fernando Correia añade en los comentarios:
Para obtener soporte de color y hacer tmux
trabajo, combiné ambos ejemplos:
docker exec -it my-container env TERM=xterm-256color script -q -c "/bin/bash" /dev/null
Como comentó Chepner (respuesta anterior), .bash_profile
se obtiene (es un shell interactivo), ya que bash_prompt
es llamado por .bash_profile
.
Pero el problema de docker 9299 ilustra que TERM
no parece configurarse de inmediato, lo que obliga a los usuarios a abrir otro bash con:
docker exec -ti test env TERM=xterm-256color bash -l
Tiene problemas de color similares con el problema 8755.
Para ilustrar/reproducir el problema:
docker exec -ti $CONTAINER_NAME tty
not a tty
La solución actual es:
docker exec -ti `your_container_id` script -q -c "/bin/bash" /dev/null
Ambos suponen que primero tiene un contenedor en ejecución, lo que podría no ser conveniente aquí.