GNU/Linux >> Tutoriales Linux >  >> Linux

El indicador de bash de Docker no muestra la salida de color

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í.


Linux
  1. ¿Por qué la sustitución del proceso Bash no funciona con algunos comandos?

  2. ¿Cómo decide un programa si tiene o no una salida en color?

  3. "nohup Sudo ..." no solicita contraseña y no hace nada?

  4. “cola -f | Iconv -fsjis” ¿No genera nada?

  5. ¿El comando Rm en Bash Script no funciona con variables?

Bash:escribir en archivo

[Solucionado] bash:sudo:comando no encontrado

¿Por qué el archivo de traducción de Bash no contiene todos los textos de error?

La coincidencia de patrones no funciona en el script bash

¿Bash tiene un comando de color, como se ve en MS-Windows CMD?

¿Qué significa exactamente el dispositivo de entrada no es un TTY en la salida de ejecución de la ventana acoplable?