如何在 Docker 容器中获取交互式 bash shell

Jac*_*ern 2 bash shell docker dockerfile

我正在尝试使用 bash shell(而不是 sh shell)以交互模式连接到正在运行的容器或启动新容器。我想运行:

docker exec -it <container_name> /bin/bash
Run Code Online (Sandbox Code Playgroud)

或者

docker run -it <container_name> <image_name>
Run Code Online (Sandbox Code Playgroud)

或者

docker run -it <container_name> <image_name> /bin/bash
Run Code Online (Sandbox Code Playgroud)

并获得交互式 bash shell。

到目前为止我尝试过的:

根据我尝试过的这篇文章

将其添加到我的 Dockerfile 中

SHELL ["/bin/bash", "-c"]
Run Code Online (Sandbox Code Playgroud)

将其添加到我的 Dockerfile 中

RUN ["/bin/bash", "-c", "echo I am now using bash!"]
Run Code Online (Sandbox Code Playgroud)

但是每次我尝试以交互模式运行容器(docker run -it或附加到正在运行的容器(docker exec -it))时,我都会进入shshell。

如何获得在 docker 容器内运行的交互式 bash shell?

更新:最小工作 Dockerfile

FROM ubuntu

SHELL ["/bin/bash", "-c"]
Run Code Online (Sandbox Code Playgroud)

BMi*_*tch 7

事实上,您正在使用以下命令运行交互式 bash:

docker container run -it ubuntu /bin/bash
Run Code Online (Sandbox Code Playgroud)

当您在 docker 容器中运行 bash 时,该 shell 位于容器中。因此,它不会具有来自容器外部的命令历史记录,该历史记录保存在主机文件系统上。它也不会出现提示,PS1变量不会自动导出到容器的环境中。而且它不会.bashrc从您的主机获得您的配置,因为它不在容器内。相反,您会从最小的 ubuntu 主机获得开箱即用的 bash shell。