読者です 読者をやめる 読者になる 読者になる

黒縁眼鏡は海を飛ぶ

IT中心にそこはかとなく

Dockerによる仮想コンテナを試してみる(1.5日目)~ dockerコンテナに入る編~

attachコマンドで実行中のコンテナに入ることができるのですが、いちいちコンテナのIDをコピペするのが面倒臭い。
世のエンジニアな方々がこんなことを我慢しているわけがない、ということで少し調べてみると、何種か方法があるっぽい。
ってことでやってみたでござる。

sshd立ち上げろ

dokerコンテナ内でsshd立ち上げて接続すればいいじゃん法。
でもなんかいまいち。 一々sshd立ち上げなきゃ接続できないのかっていうと決してそんなことはない。はず。

nsinitでやれば?

Dockerコンテナに入るなら SSH より nsinit が良さそう - Gosuke Miyashita

こちらの説明がわかりやすくて、実際にやってみた。

# nsinit exec /bin/bash
2014/08/16 22:54:44 failed to exec: mountpoint not found

んぅ…うまくいかない。
ちょっと調べてみたのですが、どうにも解決までいかなくて挫折。

nsenterもあるよ

RHEL/CentOS 6で Docker に nsinit/nsenter する - Qiita

どんぴしゃな感じでとても参考になりました。
が、dockerの基本的なことをわかってないのに追跡する方向性が発散してしまいそうになったので、もうこれはシェル芸もどきでなんとかするしかないのではという結論に至る。

シェル関数を書いちゃおうぜ!

要はコンテナのIDを拾えればそれでいいんじゃよ、という結論に至った(至ってしまった)ため、以下のような関数を書きました。

dock_attach(){
    id=($(docker ps -q --no-trunc | tr '\n' ' '))
    if [ -z $1 ]; then
        echo "Usage: dock_attach <container_id>" >&2
        return 1
    fi
    select=${id[$1]}
    sh -c "docker attach $select"
}

dock_attach 0とかやってあげると、docker psで表示される1行目のコンテナに入ることができます。
なんかもっと良い方法がありそうなのですが、楽する前に基礎をしっかりということで、引き続きお勉強と洒落こみたいと思います。