如何在OSX(Boot2docker)上获得与docker容器的ssh连接

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

我在OSX上用码头n.boot2docker

我想从我的终端连接到一个正在运行的容器。

但我不能这么做

我认为这是因为Docker在虚拟机中运行。

提问于
用户回答回答于

有几件事你必须做,以启用ssh'ing虚拟机中运行的容器:

  1. 安装sshd在你的容器中运行(例子)。sshd在默认情况下不存在,因为容器通常只运行一个进程,尽管它们可以运行多个进程。
  2. EXPOSE一个端口作为创建映像的一部分,通常为22,因此当您运行容器时,守护进程将连接到EXPOSE容器内的'd端口,并且可以在容器的外部暴露某些东西。
  3. 当你运行容器时,需要决定如何映射该端口。可以让Docker自动执行或明确执行。我建议明确:docker run -p 42222:22 ...将虚拟机上的端口42222映射到容器中的端口22。
  4. 将端口映射添加到VM以将端口公开给主机。例如,当你的虚拟机未运行时,您可以添加如下映射:VBoxManage modifyvm "boot2docker-vm" --natpf1 "containerssh,tcp,,42222,,42222"

然后从你的主机,你应该能够SSH到端口42222到达容器的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 port 42222-> container port 22。

用户回答回答于

Docker添加了docker exec命令到Docker 1.3.0。可以使用以下命令连接到正在运行的容器:

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

它将连接到正在运行的容器上的bash提示符。

扫码关注云+社区

领取腾讯云代金券