GNU/Linux >> Belajar Linux >  >> Linux

Docker bash prompt tidak menampilkan keluaran warna

Berdasarkan jawaban VonC, saya menambahkan yang berikut ke Dockerfile saya (yang memungkinkan saya menjalankan wadah tanpa mengetikkan variabel lingkungan pada baris perintah setiap saat):

ENV TERM xterm-256color
#... more stuff
CMD ["bash", "-l"]

Dan tentu saja itu bekerja dengan:

docker run -it my-image:tag

Untuk tmux untuk bekerja dengan warna, di ~/.tmux.conf saya Saya membutuhkan:

set -g default-terminal "screen-256color"

dan untuk dukungan UTF-8 di tmux , di ~/.bashrc saya :

alias tmux='tmux -u'

Dockerfile saya:

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 membuat image berdasarkan Fedora 26, memperbaruinya, menginstal beberapa paket (Git, Vim, golang, dan tmux), menginstal plugin patogen untuk Vim, lalu menginstal repositori Git dari sini vim-go-ide dan akhirnya melakukannya beberapa penyesuaian pada beberapa file konfigurasi untuk mendapatkan warna dan UTF-8 berfungsi dengan baik. Anda hanya perlu menambahkan penyimpanan persisten, mungkin dipasang di bawah /app/go.

Jika Anda memiliki gambar dengan semua alat pengembangan sudah terpasang, buat saja Dockerfile dengan ENV dan tambahkan perintah untuk memodifikasi file konfigurasi dalam RUN pernyataan tanpa perintah instalasi dan gunakan gambar dasar Anda di FROM penyataan. Saya lebih suka solusi ini karena saya malas dan (selain penyiapan awal) menghemat pengetikan saat Anda ingin menjalankan gambar.

Menggunakan Vim dan plugin dalam tmux


Menambahkan -t berfungsi untuk saya:

docker exec -t vendor/bin/phpunit

Menambah jawaban VonC, saya membuat fungsi Bash ini:

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]"
}

OP SolomonT melaporkan bahwa docker run dengan env lakukan pekerjaan:

docker run --rm -it -e "TERM=xterm-256color" govim bash -l

Dan Fernando Correia menambahkan di komentar:

Untuk mendapatkan dukungan warna dan membuat tmux berfungsi, saya menggabungkan kedua contoh:

docker exec -it my-container env TERM=xterm-256color script -q -c "/bin/bash" /dev/null

Seperti yang dikomentari chepner (jawaban sebelumnya), .bash_profile bersumber (ini adalah shell interaktif), sejak bash_prompt dipanggil oleh .bash_profile .

Tetapi masalah buruh pelabuhan 9299 mengilustrasikan TERM itu tampaknya tidak langsung disetel, memaksa pengguna untuk membuka bash lain dengan:

docker exec -ti test env TERM=xterm-256color bash -l

Anda memiliki masalah warna yang mirip dengan masalah 8755.

Untuk mengilustrasikan/mereproduksi masalah:

docker exec -ti $CONTAINER_NAME tty
not a tty

Solusi saat ini adalah :

docker exec -ti `your_container_id` script -q -c "/bin/bash" /dev/null

Keduanya menganggap Anda memiliki wadah yang sedang berjalan terlebih dahulu, yang mungkin tidak nyaman di sini.


Linux
  1. [Memperbaiki] bash:Sudo:perintah tidak ditemukan

  2. Mengapa Substitusi Proses Bash Tidak Bekerja Dengan Beberapa Perintah?

  3. Bagaimana Suatu Program Memutuskan Apakah Memiliki Output Berwarna atau Tidak?

  1. “nohup Sudo …” Tidak Meminta Passwd Dan Tidak Melakukan Apa-apa?

  2. Tampilan Prompt Bash Hh:mm:dd?

  3. Qt tidak membuat file keluaran di folder debug/rilis di Linux

  1. Apa yang dilakukan 'bash -c'?

  2. Pencocokan pola tidak berfungsi dalam skrip bash

  3. Bagaimana cara mengatur warna command prompt di Bash?