我正在研究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回容器?
答案 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