交互模式将被忽略,因为没有它的容器将运行

时间:2019-11-22 08:23:42

标签: docker dockerfile docker-container

我试图了解docker container start的工作方式,并使用以下Dockerfile

FROM ubuntu:18.04

WORKDIR /root

RUN apt-get update && apt-get install -y \
                      curl \
                      gnupg2 \
                      git

CMD ["/bin/bash"]

现在我将图像构建为

docker image build -t tst .

并如下运行容器:

docker container run -d tst

我在没有交互模式的情况下运行它,因此命令执行完成后就退出了。现在,我尝试以交互方式启动此容器:

docker container start -i 57806f93e42c

但是它会立即退出,因为它将以非交互方式运行:

STATUS                                                                                                   
Exited (0) 9 seconds ago

是否有一种方法可以覆盖已创建的容器的“交互性”?

1 个答案:

答案 0 :(得分:1)

这是因为您的容器在没有allocating pseudo-TTY的情况下以分离模式运行,因为bash是容器的主要进程,因此它将立即退出。

  

这意味着,在后台(-d)中运行时,外壳程序会立即退出。

Docker container will automatically stop after "docker run -d"

所有您需要分配伪tty

docker container run -dit tst

和下一个命令

docker container start -i 57806f93e42c

您只是尝试启动已停止的容器,但再次它将立即退出,它不会创建新容器,而是尝试启动已停止的容器。

docker container stop
  

启动一个或多个停止的容器

container_start