docker - Failed to get D-Bus connection: No connection to service manager.の対処 - Qiita
nsenterとは
- nsenterを使えば
docker run
した後にそのコンテナにattachして他のプログラムを起動できる。 - なお、コンテナが
stop
状態ではPidが0なので接続出来ない。
やり方
コンテナIDを確認
# docker ps -a
CONTAINER ID IMAGE
7c50b96fccd0 tukiyo3/centos7-ja
- 直近のは
docker ps -q
でもわかる
コンテナのPidを調べる
# docker inspect 7 | grep -i pid
"Pid": 9240,
接続してbash起動
# nsenter -t 9240 -m -u -i -n -p -- /bin/bash
nsenter
/bin/bash
bash-4.2# pwd
/
bash-4.2# exit
.bashrcに書くと便利
Pid取得
docker inspect $(d ps -q) | awk '/Pid/{print int($2)}'
上記をalias設定
alias dpid='docker inspect $(d ps -q) | awk "/Pid/{print int(\$2)}"'
aliasを使って接続
nsenter -t $(dpid) -m -u -i -n -p -- /bin/bash
コマンド一つで接続したい場合
$ alias nconnect='sudo nsenter -t $(dpid) -m -u -i -n -p -- /bin/bash'
$ nconnect
bash-4.2#
サクッとnsenterで接続したい
nsconnect() {
DOCKER_PID=$(docker inspect --format '{{.State.Pid}}' $(docker ps -ql))
sudo nsenter -t ${DOCKER_PID} -m -u -i -n -p /bin/sh
}