OSXを使用していますが、ホストvmにSSHで接続して、次のことができるようにしたいと思います。
明確にするために、この質問はVagrantプロバイダーが作成するdockerコンテナーではなく、Vagrantが作成する中間boot2dockerホストvmにsshすることに関するものです。
回避策は、デフォルトのboot2dockerをホストvmとして使用しないことです(答え here で説明されています)が、それはこの質問の目的ではありません。
Vagrantのboot2dockerは、boot2dockerのsshユーザー名とパスワードを保持します。
VMへのSSH
$ boot2docker ssh
Boot2Dockerは生成されたSSHキーを使用して自動ログインしますが、マシンに手動でSSHで接続する場合(または
boot2docker
管理対象VMを使用しない場合)、資格情報は次のとおりです。user: docker pass: tcuser
https://github.com/boot2docker/boot2docker#ssh-into-vm
デフォルトでは、ポートはローカルポート2022
から転送されます。これを確認できます:
$ VBoxManage list vms | grep docker
"docker-Host_default_1234567890000_1234" {3d66ecf6-4539-47ca-afd2-66f953cd9a3e}
$ VBoxManage showvminfo docker-Host_default_1234567890000_1234 | grep ssh
NIC 1 Rule(1): name = ssh, protocol = tcp, Host ip = 127.0.0.1, Host port = 2022, guest ip = , guest port = 22
そしてログインします:
$ ssh docker@localhost -p 2022
docker@localhost's password: tcuser
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 0.8.0
docker@boot2docker:~$
2015年10月:Boot2dockerは廃止され、docker-machineが採用されました。ログインします:
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default * virtualbox Running tcp://192.168.99.100:2376
$ docker-machine ssh default
vagrant ssh docker-Host-id
を使用してdockerホストにsshできますが、最初にdocker-Host-idを知る必要があります。vagrant global-status
コマンドですべてのアクティブなVagrant環境のリストを取得できます。
grepでフィルタリングできるdocker-Host IDを取得するには:
vagrant global-status | grep docker-Host
次のような出力が得られます。
68f58d0 default virtualbox running /Users/yourUser/.vagrant.d/data/docker-Host
最初の列IDをコピーしてから、sshをdocker-Hostにコピーします。
vagrant ssh 68f58d0
boot2docker
のssh
関数を使用するのをやめて、次のように「手動で」実行することもできます。
$ ssh \
-i $HOME/.ssh/id_boot2docker \
-p $(boot2docker config 2>&1 | awk '/SSHPort/ {print $3}') \
docker@localhost
-p
への引数は、通常ポート2022ですが、上記は必要に応じてプログラムでこれを決定する方法を示しています。
SSHを直接使用できます:
ssh docker@$(boot2docker ip)
(パスワード:tcuser、 https://github.com/boot2docker/boot2docker#ssh-into-vm を参照)
また、公開鍵をboot2dockerマシンにコピー/貼り付けできるため、毎回パスワードを入力する必要がありません。
cat ~/.ssh/id_rsa.pub | ssh docker@$(boot2docker ip) 'cat - >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys'
vagrantパスワードを持つvagrant Hostマシンの場合:
ssh -p 2222 vagrant@localhost
それ以外の場合(tcuserパスワード:
ssh -p 2222 docker@localhost
ここ は、これが機能する理由の詳細です。