繁体   English   中英

交互式启动 docker 容器

[英]start docker container interactively

我有一个非常简单的 dockerfile 只有一行,即“FROM ubuntu”。 我通过命令docker build -t ubuntu_.

我知道我可以从此图像创建一个新的 docker 容器并使用命令docker run -it my_new_container交互方式运行它

稍后我可以使用命令start my_new container启动这个新容器

据我了解,我也应该能够通过start -i my_new container交互地使用这个容器

但是,它不起作用。 它只是运行并退出。 我没有像使用运行时那样进入容器的命令提示符。 我究竟做错了什么?

如果我理解正确,您想在终端中查看来自容器的日志,就像您使用docker run运行图像时一样。 如果是这种情况,请尝试

docker start -a my_docker_container

您可以使用以下命令进入正在运行的容器:

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

例子:

docker exec -it my_new_container /bin/bash

如果容器中没有bash ,可以用sh替换bash

如果您需要显式使用 UID,例如 root = UID 0,您可以指定:

docker exec -it -u 0 my_new_container /bin/bash

这将把你记录为root

直接回答:

要为非运行容器运行交互式 shell,首先要找到容器所基于的图像。

然后:

docker container run -it [yourImage] bash

如果您最终的容器是基于 alpine 图像,请将 bash 替换为 sh。

从技术上讲,这将创建一个新容器,但它完成了工作。

编辑[首选方法]:

更好的方法是让容器做一些无关紧要的事情。 VSCode 文档中的一个很好的解决方案是将以下命令放入 docker-compose.yml 文件的服务定义中:

services:
   my-app-service:
      command: ["sleep", "infinity"]
      # other relevant parts of your service def...

这里的想法是你告诉你的容器休眠一段时间(无限量的时间)。 具有讽刺意味的是,你的容器将不得不维护这个 state,迫使容器继续运行。

这就是我运行容器的方式。 向需要这些信息的人致以最良好的祝愿。 我们都在学习:)

您无法将 shell 放入其已停止的 state 中的容器中,或直接使用另一个入口点重新启动它。 如果容器不断退出并且您需要检查它,我知道的唯一选择是将容器作为新图像提交,然后根据相关答案使用该图像启动新容器。

如果您不再需要该容器并且只想让它保持运行,则应该使用不会退出的进程来运行它。 带有 Ubuntu 图像的示例是(为此您不需要Dockerfile ):

docker run -d ubuntu --name carrot tail -f /dev/null

您将看到此容器保持运行状态,您现在可以在其上运行bash以访问 CLI:

docker exec -ti carrot bash

如果容器由于某种原因停止,例如机器重启,您可以将其重新启动:

docker start carrot

它将继续熬夜。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM