OSX でboot2dockerを使用して docker を使用しています。
ターミナルから実行中のコンテナーへの Ssh 接続を取得したいと考えています。
しかし、私はこれを行うことはできません:(
Docker が仮想マシンで実行されているためだと思います。
OSX でboot2dockerを使用して docker を使用しています。
ターミナルから実行中のコンテナーへの Ssh 接続を取得したいと考えています。
しかし、私はこれを行うことはできません:(
Docker が仮想マシンで実行されているためだと思います。
docker exec
Docker はDocker 1.3.0 にコマンドを追加しました。以下を使用して、実行中のコンテナーに接続できます。
docker exec -it <container id> /bin/bash
これにより、実行中のコンテナーの bash プロンプトに接続されます。
VM で実行されているコンテナーへの ssh を有効にするには、いくつかのことを行う必要があります。
sshd
コンテナーにインストールして実行します ( example )。sshd
コンテナーは通常 1 つのプロセスのみを実行しますが、好きなだけプロセスを実行できます。EXPOSE
イメージ作成の一環としてのポート (通常は 22)。これにより、コンテナーを実行すると、デーモンがEXPOSE
コンテナー内の 'd ポートに接続し、コンテナーの外部に何かを公開できるようになります。docker run -p 42222:22 ...
VM のポート 42222 をコンテナのポート 22 にマッピングすることを明示することをお勧めします。VBoxManage modifyvm "boot2docker-vm" --natpf1 "containerssh,tcp,,42222,,42222"
次に、ホストから、ホストのポート 42222 に ssh して、コンテナーの ssh デーモンに到達できるはずです。
上記の手順を実行すると、次のようになります。
$ VBoxManage modifyvm "boot2docker-vm" --natpf1 "containerssh,tcp,,42222,,42222"
$ ./boot2docker start
[2014-04-11 12:07:35] Starting boot2docker-vm...
[2014-04-11 12:07:55] Started.
$ docker run -d -p 42222:22 dhrp/sshd
Unable to find image 'dhrp/sshd' (tag: latest) locally
Pulling repository dhrp/sshd
2bbfe079a942: Download complete
c8a2228805bc: Download complete
8dbd9e392a96: Download complete
11d214c1b26a: Download complete
27cf78414709: Download complete
b750fe79269d: Download complete
cf7e766468fc: Download complete
082189640622: Download complete
fa822d12ee30: Download complete
1522e919ec9f: Download complete
fa594d99163a: Download complete
1bd442970c79: Download complete
0fda9de88c63: Download complete
86e22a5fdce6: Download complete
79d05cb13124: Download complete
ac72e4b531bc: Download complete
26e4b94e5a13b4bb924ef57548bb17ba03444ca003128092b5fbe344110f2e4c
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26e4b94e5a13 dhrp/sshd:latest /usr/sbin/sshd -D 6 seconds ago Up 3 seconds 0.0.0.0:42222->22/tcp loving_einstein
$ ssh root@localhost -p 42222
The authenticity of host '[localhost]:42222 ([127.0.0.1]:42222)' can't be established.
RSA key fingerprint is ....
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:42222' (RSA) to the list of known hosts.
root@localhost's password: screencast
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.12.1-tinycore64 x86_64)
* Documentation: https://help.ubuntu.com/
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
root@26e4b94e5a13:~# exit
logout
つまり、ssh-> localhost 42222-> VM ポート 42222-> コンテナー ポート 22 が表示されます。
実行中のコンテナーに入りたいだけの場合は、 の使用を検討してnsenter
ください。これは、docker コンテナーに入るために使用できる単純な bash スクリプト ( Chris Jones によって提案された) です。$PATH
as docker-enter のどこかに保存し、chmod +x
#!/bin/bash
set-e
# Check for nsenter. If not found, install it
boot2docker ssh '[ -f /var/lib/boot2docker/nsenter ] || docker run --rm -v /var/lib/boot2docker/:/target jpetazzo/nsenter'
# Use bash if no command is specified
args=$@
if[[ $# = 1 ]]; then
args+=(/bin/bash)
fi
boot2docker ssh -t sudo /var/lib/boot2docker/docker-enter "${args[@]}"
次に、実行できますdocker-enter 89af3d
(または入力したい構成)
A slightly modified variant of Michael's answer that just requires the container you want to enter be named (APPNAME):
boot2docker ssh '[ -f /var/lib/boot2docker/nsenter ] || docker run --rm -v /var/lib/boot2docker/:/target jpetazzo/nsenter'
boot2docker ssh -t sudo /var/lib/boot2docker/docker-enter $(docker ps | grep $APPNAME | awk '{ print $1 }')