以交互方式启动 docker 容器

Hen*_*jon 5 linux docker

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

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

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

据我了解,我还应该能够通过以下方式以交互方式使用此容器 start -i my_new container

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

小智 17

如果我理解正确,您希望在终端中查看容器中的日志,就像使用docker run. 如果是这种情况,请尝试使用

docker start -a my_docker_container
Run Code Online (Sandbox Code Playgroud)


Ano*_*tor 9

直接回答:

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

然后:

docker container run -it [yourImage] bash
Run Code Online (Sandbox Code Playgroud)

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

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

编辑[首选方法]:

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

services:
   my-app-service:
      command: ["sleep", "infinity"]
      # other relevant parts of your service def...
Run Code Online (Sandbox Code Playgroud)

这里的想法是你告诉你的容器休眠一段时间(无限长的时间)。具有讽刺意味的是,您的容器将必须保持这种状态,迫使容器继续运行。

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


Ron*_*Ron 7

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

docker exec -it my_new_container /bin/bash
Run Code Online (Sandbox Code Playgroud)

如果容器中没有,则可以替换bash为。shbash


要稍后附加到正在运行的容器,请使用-a/--attach选项:

docker start -a  my_new_container
Run Code Online (Sandbox Code Playgroud)

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

docker exec -it -u 0 my_new_container /bin/bash
Run Code Online (Sandbox Code Playgroud)

这会将您记录为root