docker
swarm

Docker Swarm で動作しているコンテナの内部にbashで入る

docker stack psで得られるIDは実際のコンテナIDではないため、実際に動作しているホストでdocker psを行ってCONTAINER IDを得た後で、動作しているホスト内でdocker exec -ti hash bashを行う流れとなる。今の所見つけられた方法はこれだけ。

実際にやってみます。まずスタック名を調べる

$ docker -H manage.swarm.local stack ls
NAME SERVICES
hoge 2

hogeスタックのコンテナ一覧を探す

$ docker -H manage.swarm.local stack ps hoge
ID            NAME              IMAGE  NODE            DESIRED STATE CURRENT STATE          ERROR PORTS
aserthjklqwy  hoge_hoge.1       hoge   01.swarm.local  Running       Running 19 hours ago
tw71341fsiac   \_ hoge_hoge.1   hoge   01.swarm.local  Shutdown      Rejected 19 hours ago
3610bgbnlanv  hoge_hoge2.1      hoge2  01.swarm.local  Running       Running 19 hours ago
rbkfaa901832   \_ hoge_hoge2.1  hoge2  01.swarm.local  Shutdown      Shutdown 19 hours ago

hogeスタックで動作しているコンテナが動作しているNODEに対してdocker psを実行しCONTAINAER IDを得る

docker -H 01.swarm.local ps | grep hoge_hoge.1
e74a07ec37a8  hoge  "/usr/bin/java -XX:+…"  19 hours ago  Up 19 hours  hoge_hoge.1.1.98h4f6of6gfqh7w3d7v5ytfdz

該当のコンテナが動作しているホストでexecを行う

$ docker -H 01.swarm.local exec -ti e74a07ec37a8 bash
root@e74a07ec37a8:/#

このような感じになる。スケールしなければいけない環境ではDocker Swarmは活きてくるが、単一ホストで動作させるだけならdocker-composeで十分だなと思う。