🐳
コマンドプロンプトにcontainer名を表示する
docker exec
した時、containerが分からなくなる
container内で作業する時に、今どのContainerで作業しているか明示したいです。
ググってみたのですがいい解決方法がなく自分なりの落とし所がみつかったので紹介します。
動作イメージ
解決法
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
Discussion