[英]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.