🐳

コマンドプロンプトにcontainer名を表示する

2022/09/27に公開

docker exec した時、containerが分からなくなる

container内で作業する時に、今どのContainerで作業しているか明示したいです。
ググってみたのですがいい解決方法がなく自分なりの落とし所がみつかったので紹介します。

shell
動作イメージ

解決法

Version

docker versionコマンドを実行してAPI version > 1.25であることを確認します。

docker version
# output
#Client: Docker Engine - Community
# Version:           20.10.17
# API version:       1.41
# ~~~

方針

docker execには-eオプションで環境変数を与えることが出来るので特定の環境変数があるときに、PS1を書き替えるようにします。

準備

下記のようにshell起動時に読みこまれるファイルを編集して特定の環境変数があるときに読み込まれるPS1を用意します。

.bashrc
# ~~~
if [[ -n "$DOCKER_CONTAINER_NAME" ]]; then
    PS1="🐳 \e[0;34m$DOCKER_CONTAINER_NAME\e[0m \w "
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
# ~~~

用意した、.bashrcをcontainer起動時にマウントします。

dockoer-compose.yaml
# ~~~
    volumes:
      - ~/.bashrc:/home/test/.bashrc
# ~~~

コンテナに入るときに、環境変数を指定します。

docker exec -it -e DOCKER_CONTAINER_NAME=TEST test bash

まとめ

docker execでコンテナの名前を確認するためのTipsを紹介しました。

参考

最後に

自分の設定を紹介します。
gitのbranchも表示できるようにしています。

.bash_aliases
#----
function parse_git_branch {
    git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ [\1]/'
}
function promps {
    local  BLUE="\[\e[1;34m\]"
    local  RED="\[\e[1;31m\]"
    local  GREEN="\[\e[1;32m\]"
    local  YELLOW="\[\e[1;33m\]"
    local  WHITE="\[\e[00m\]"
    local  GRAY="\[\e[1;37m\]"

    case $TERM in
        xterm*) TITLEBAR='\[\e]0;\W\007\]';;
        *)      TITLEBAR="";;
    esac
    local BASE="\u@\h"
    if [[ -n "$DOCKER_CONTAINER_NAME" ]]; then
        PS1="🐳 \e[0;34m$DOCKER_CONTAINER_NAME\e[0m \w ${RED}\$(parse_git_branch)${BLUE}\$${WHITE} \n"
    else
        PS1="${TITLEBAR}${GREEN}${BASE}${WHITE}:${BLUE}\w${RED}\$(parse_git_branch)${BLUE}\$${WHITE} \n"
    fi
}
promps
GitHubで編集を提案

Discussion