如何使用container-id重启容器?

时间:2017-01-09 01:43:32

标签: docker

我使用命令

创建了一个容器
docker run ubuntu /bin/bash -c "echo 'cool content' > /tmp/cool-file"

现在我看到容器已退出

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
9e5017aef3f9        ubuntu              "/bin/bash -c 'echo '"   38 seconds ago      Exited (0) 36 seconds ago                       elegant_euler

问题:如何使用 container-id 重新启动并进入此容器的交互模式? 我不能使用docker run -it <image_name>,因为这需要图像名称而不是容器ID。 我尝试使用docker attach,但我认为这只适用于运行容器。 我还不想提交这个容器,如何使用它的容器ID重启并进入该容器的交互模式?
编辑:我可以使用docker start {container-id}进入其他容器,然后运行docker attach {container-id}。我想知道是否有一些特殊的东西,我创建容器的方式会导致这种行为。我刚开始使用码头工具,所以如果我错过了一些基本位,请指引我正确的方向。

3 个答案:

答案 0 :(得分:11)

容器在完成命令时退出。所以容器以

开头
docker run ubuntu /bin/bash -c "echo 'cool content' > /tmp/cool-file"
命令echo完成后,

将立即退出。在这种情况下,重启该容器是没有意义的。

如果您以分离模式运行新容器,您将能够将其保持在线状态并再次附加它。

因此,在您的情况下,您应该在分离模式下运行一个新容器,运行像/bin/bash这样的命令,然后您可以运行回声并附加它

docker run -d -ti ubuntu /bin/bash
docker exec -ti <containerId> /bin/bash -c "echo 'cool content' > /tmp/cool-file"

容器将保持活动状态,因此您可以在其上执行更多命令,例如: docker exec -ti / bin / bash -c“cat / tmp / cool-file”

或运行一个新的/ bin / bash来“附加”你的容器并在其中作为命令提示符工作

docker exec -ti <containerId> /bin/bash
root@<containerId>:/# cat /tmp/cool-file 
cool content

您可以成功停止/启动/重启此容器

docker stop <containerId> && docker start <containerId>

docker restart <containerId>

提醒您重新启动容器时,它会再次执行其原始命令。因此,如果你能够重新启动用例的容器(但你不能)它会再次运行/bin/bash -c "cat /tmp/cool-file"

重新启动使用命令/ bin / bash运行的容器,它将在重新启动时再次运行相同的命令。

重启现有容器时,通常无法将命令更改为RUN;要做到这一点你可以尝试How to start a stopped docker container with a different command建议的一些技巧。

答案 1 :(得分:3)

我试过自己:

docker restart <container_id>

docker exec -it <container_id> bash

非常适合重启并进入交互式终端。

答案 2 :(得分:0)

检查Docker start command

docker stop {containerId} && docker start -i {containerId}