Docker MachineにSSH、Docker ContainerにSSHするコマンド

Dockerでいろいろ作業しなきゃいけないのに、肝心なときに思い出せないSSHコマンド!!備忘のためにまとめておきます。

Docker Machine一覧を取得する

docker-machineの一覧を取得するためには、docker-machine ls を実行します。

<実行例>

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.06.1-ce

SSHするのに名前が必要になるので控えておきましょう。

Docker MachineにSSHする

docker-machineにSSHするにはdocker-machine ssh docker-machine名 を実行します。

下記はマシン名defaultにSSHを実行した結果。

<実行例>

$ docker-machine ssh default
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 18.06.1-ce, build HEAD : c7e5c3e - Wed Aug 22 16:27:42 UTC 2018
Docker version 18.06.1-ce, build e68fc7a
docker@default:~$

また、SSH後にsudo -i を実行することで、rootユーザになれます。

<実行例>

docker@default:~$ sudo -i
Boot2Docker version 18.06.1-ce, build HEAD : c7e5c3e - Wed Aug 22 16:27:42 UTC 2018
Docker version 18.06.1-ce, build e68fc7a
root@default:~#

ユーザがdocker -> rootになっているのがわかると思います。

Docker Containerの一覧を取得する

起動中のDocker Containerの一覧を取得するためには、docker container ps を実行します。

<実行例>

$ docker container ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                 PORTS                                                   NAMES
h762opl971kj        gitlab/gitlab-ce:latest         "/assets/wrapper"        2 hours ago         Up 2 hours (healthy)   443/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp   gitlab
l876kh7a75sa        mattermost/mattermost-preview   "/bin/sh -c ./docker…"   7 days ago          Up 2 hours             3306/tcp, 33060/tcp, 0.0.0.0:8065->8065/tcp             mattermost-preview

SSHするのにCONTAINER ID かNAMES を使用します。今回はgitlab(上)にSSHしてみます。

コンテナID「h762opl971kj」をコピっておきます。

Docker ContainerにSSH

Docker ContainerにSSHするにはdocker-machine ssh CONTAINER-ID を実行します。

docker exec -it h762opl971kj bash

<実行例>

コンテナIDで実行した例

$ docker exec -it h762opl971kj bash
root@h762opl971kj:/#

コンテナ名で実行した例

$ docker exec -it gitlab bash
root@h762opl971kj:/#

コンテナID、コンテナ名どちらを使用してもコンテナ内に入れることが確認できます。

コンテナにSSHする際の注意点

Docker Toolboxを使用している場合、Docker Quickstart Terminalで実行しないとSSHできませんでした。

<実行例>

gitbashで実行してみた結果。

$ docker exec -it gitlab bash
the input device is not a TTY. 
If you are using mintty, try prefixing the command with 'winpty'

SSHがうまくいかない場合、実行している環境を確認してみると良いかもしれません。