Dockerコンテナ用のシェルスクリプトを作成しています。
スクリプトを実行する前に、Dockerコンテナかホストかを確認したいと思います。
このような:
if $MACHINE=docker; then
echo proceed
elif $MACHINE=host; then
echo 'it's not container'
exit
fi
答え1
dockerに属する制御グループがあることを確認できます。
if grep -q docker /proc/1/cgroup; then
echo inside docker
else
echo on host
exit
fi
答え2
が利用可能で、virt-what
Dockerを認識します。 Debian とその派生物、または Red Hat とその派生物でそれぞれ使用またはapt install virt-what
インストールできます。yum install virt-what
戻りコードが0でエラーがない場合、マシンは物理マシンまたは認識できない仮想マシンタイプです。港湾労働者が戻ってきますdocker
。
答え3
これはcgroup 2.0では機能せず、MacのDocker Desktopでも機能しません。
root@8a1d175a0b6c:/# cat /proc/self/cgroup
0::/
Linuxのルートファイルシステムにファイルがある場合は、/.dockerenv
Dockerコンテナ内で実行されているかどうかを知るためのより信頼性の高い方法ですが、これはコンテナIDを提供せず、空のファイルです。
あまり脆弱な方法が必要
- コンテナで実行しているときを検出し、
- 独自のコンテナIDを取得します。
Dockerチームはここで本当に失敗しました。少なくともコンテナIDを入力する必要があります/.dockerenv
。