16

OSX でboot2dockerを使用して docker を使用しています。

ターミナルから実行中のコンテナーへの Ssh 接続を取得したいと考えています。

しかし、私はこれを行うことはできません:(

Docker が仮想マシンで実行されているためだと思います。

4

5 に答える 5

32

docker execDocker はDocker 1.3.0 にコマンドを追加しました。以下を使用して、実行中のコンテナーに接続できます。

docker exec -it <container id> /bin/bash

これにより、実行中のコンテナーの bash プロンプトに接続されます。

于 2015-01-07T19:06:09.170 に答える
32

VM で実行されているコンテナーへの ssh を有効にするには、いくつかのことを行う必要があります。

  1. sshdコンテナーにインストールして実行します ( example )。sshdコンテナーは通常 1 つのプロセスのみを実行しますが、好きなだけプロセスを実行できます。
  2. EXPOSEイメージ作成の一環としてのポート (通常は 22)。これにより、コンテナーを実行すると、デーモンがEXPOSEコンテナー内の 'd ポートに接続し、コンテナーの外部に何かを公開できるようになります。
  3. コンテナーを実行するときは、そのポートをマップする方法を決定する必要があります。Docker に自動的に実行させることも、明示的に実行させることもできます。docker run -p 42222:22 ...VM のポート 42222 をコンテナのポート 22 にマッピングすることを明示することをお勧めします。
  4. ポートマップを VM に追加して、ポートをホストに公開します。たとえば、VM が実行されていない場合、次のようなマッピングを追加できます。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 が表示されます。

于 2014-04-11T19:25:06.133 に答える
1

実行中のコンテナーに入りたいだけの場合は、 の使用を検討してnsenterください。これは、docker コンテナーに入るために使用できる単純な bash スクリプト ( Chris Jones によって提案された) です。$PATHas 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(または入力したい構成)

于 2014-10-01T20:04:33.070 に答える
0

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 }')
于 2014-10-19T01:33:17.570 に答える