`docker 运行 -d` 和 `docker 运行 -dit` 有什么区别?

What's the difference between `docker run -d` and `docker run -dit`?

如果我想将其用作 Node.js 的开发环境,是否可以仅 docker run -d

我真的需要以下内容吗?

--interactive , -i      Keep STDIN open even if not attached
--tty , -t              Allocate a pseudo-TTY

在正常情况下,只有一个区别

-dit运行后台容器 -it 运行 容器在前台,会分配一个pseudo-terminal.

但是如果入口点是bash呢?就像 ubuntu-dockerfile 的情况一样。因为他们相信用户会根据他们的需要或依赖的 Dockerfile 覆盖 CMD。

# overwrite this with 'CMD []' in a dependent Dockerfile
CMD ["/bin/bash"]

所以在这种情况下,当您只指定 -d 时,您的容器将在启动后立即停止。所以你需要通过添加 -dit.

来分配 pseudo-terminal

如您所见,容器未 运行ning,让 check-in 停止容器。

所以我们可以在几分钟前退出该容器。让我们试试 -dit

我们可以看到容器是运行ning。如果您 运行 alpine 与 -d 高山情况相同,它也会停止。

docker run -d alpine

这将在启动后立即退出,因此 -dit 将分配一个 pseudo-TTY,如文档中所述。