linux 以交互方式启动Docker容器

d4so4syb  于 2023-04-11  发布在  Linux
关注(0)|答案(3)|浏览(124)

我有一个非常简单的dockerfile,只有一行,即“FROM ubuntu”。
我知道我可以从这个镜像创建一个新的docker容器,并使用命令docker run -it my_new_container交互运行它
稍后我可以使用命令start my_new container启动这个新容器
据我所知,我还应该能够通过start -i my_new container交互式地使用这个容器
但是,它不工作。它只是运行并退出。我没有像使用run时那样到达容器的命令提示符。我做错了什么?

83qze16e

83qze16e1#

如果我理解正确的话,您希望在终端中查看容器的日志,与使用docker run运行映像时相同。

docker start -a my_docker_container
2ul0zpep

2ul0zpep2#

直接回答:
要为未运行的容器运行交互式shell,首先要找到容器所基于的映像。
然后:

docker container run -it [yourImage] bash

如果最终的容器是基于alpine镜像的,那么用sh替换bash。
从技术上讲,这将创建一个新的容器,但它完成了工作。
EDIT [首选方法]:
一个更好的方法是给予容器一些不相关的事情做。VSCode文档中的一个很好的解决方案是将以下命令放入docker-compose.yml文件的服务定义中:

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

这里的想法是,你告诉你的容器睡眠一段时间(无限长的时间)。讽刺的是,你的容器将不得不保持这种状态,迫使容器继续运行。
这就是我运行容器的方式。最好的祝福给任何需要这些信息的人。我们都在学习:)

g9icjywg

g9icjywg3#

您可以输入运行中的容器:

docker exec -it my_new_container /bin/bash

如果bash在容器中不可用,则可以将bash替换为sh
以后要attach到正在运行的容器,请使用-a/--attach选项:

docker start -a  my_new_container

如果你需要显式地使用UID,比如root = UID 0,你可以这样指定:

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

它会将您记录为root

相关问题