Docker ssh,返回容器显示意外结果

时间:2018-04-14 16:01:02

标签: docker ssh docker-container

我正在研究Docker文档,但我很难理解创建容器,ssh和ssh的概念。

我创建了一个容器 docker run -ti ubuntu /bin/bash

然后,它启动容器,我可以运行命令。 docker ps给了我

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
0e37da213a37        ubuntu              "/bin/bash"         About a minute ago   Up About a minute                       keen_sammet

问题是我退出容器后我无法回头。 我尝试docker attach给了我Error: No such container,我尝试了docker exec -ti <container>/bin/bash给了我同样的信息Error: No such container

如何运行并ssh回容器?

2 个答案:

答案 0 :(得分:0)

当您{b}进程exit时,容器退出(通常,当前台进程退出时,容器将退出)。您看到的错误消息是准确描述情况(容器不再运行)。

如果您希望能够docker exec进入容器,您将需要运行某种持久性命令。例如,如果您要运行:

docker run -ti -d --name mycontainer ubuntu bash

这将启动一个“分离”容器。这意味着你已经开始了bash,但它只是无所事事。您可以使用docker exec在此容器中启动新进程:

$ docker exec -it mycontainer ps -fe
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 16:28 pts/0    00:00:00 bash
root        17     0  0 16:28 pts/1    00:00:00 ps -fe

或者:

$ docker exec -it mycontainer bash

在这种情况下,没有理由将bash作为主要进程启动,因为您没有与它进行交互。你可以轻松地跑...

docker run -ti -d --name mycontainer ubuntu sleep inf

......而且行为也一样。

所有这一切的最常见用例是当您的docker run命令启动某种持久性服务(如Web服务器或数据库服务器等),然后使用{{1}执行诊断或维护任务。

docker exec命令将重新连接到分离容器的主控制台。换句话说,如果我们回到最初的例子:

docker attach

您可以通过运行以下命令连接到 bash进程(而不是启动新进程):

docker run -ti -d --name mycontainer ubuntu bash

此时,docker attach mycontainer 会导致容器退出。

答案 1 :(得分:0)

首先,您不要使用docker容器(除非您在该容器中有sshd进程)。但您可以使用 docker exec -ti mycontainer bash -l <​​/ em>

执行命令

但是你只能在运行容器上执行命令。如果容器已经退出,则必须使用另一种方法:从容器中创建一个图像并运行一个新图像。

这是一个例子。首先,我创建一个容器并在其中创建一个文件然后退出它。

$ docker run -ti debian:9-slim  bash -l
root@09f889e80153:/# echo aaaaaaaaaa > /zzz
root@09f889e80153:/# cat /zzz 
aaaaaaaaaa
root@09f889e80153:/# exit
logout

正如您所见,容器已退出(24秒前退出(0))

$ docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                      PORTS                    NAMES
09f889e80153        debian:9-slim         "bash -l"                45 seconds ago      Exited (0) 24 seconds ago                            thirsty_hodgkin

所以我用 docker commit

创建一个新图像
$ docker commit 09f889e80153 bla
sha256:6ceb88470326d2da4741099c144a11a00e7eb1f86310cfa745e8d3441ac9639e

所以我可以运行一个包含以前容器内容的新容器。

$ docker run -ti bla bash -l
root@479a0af3d197:/# cat zzz 
aaaaaaaaaa