【问题标题】:How to get an interactive bash shell in a Docker container如何在 Docker 容器中获取交互式 bash shell
【发布时间】:2020-03-03 21:10:14
【问题描述】:

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

docker exec -it <container_name> /bin/bash

docker run -it <container_name> <image_name>

docker run -it <container_name> <image_name> /bin/bash

并获得一个交互式 bash shell。

到目前为止我尝试过的:

每个this post我都试过了

将此添加到我的 Dockerfile 中

SHELL ["/bin/bash", "-c"]

将此添加到我的 Dockerfile 中

RUN ["/bin/bash", "-c", "echo I am now using bash!"]

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

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

更新:最小的工作 Dockerfile

FROM ubuntu

SHELL ["/bin/bash", "-c"]

【问题讨论】:

  • 有一个完整的 Dockerfile(或者,更确切地说,一个足够完整以构成一个 minimal reproducible example,但不大于实现该目标的最短可能文件)?并非每个容器都 bash 的副本。除非我们知道您在派生什么 FROM,或者如果您正在采取明确的步骤在适当的地方安装 bash,我们不能说您是否这样做。
  • 顺便说一句,你从RUN ["/bin/bash", "-c", "echo \"$BASH_VERSION\""]得到什么输出?你说你试过相关的RUN,但你没有告诉我们发生了什么。
  • 你是如何确定你最终进入的shell是sh
  • 我认为它是外观上的 sh shell(白色纯文本与您通常在 ubuntu 的 bash 终端中看到的绿色粗体文本)以及我无法重复上一个命令的事实通过按向上箭头键等。此外,我使用最小的工作 Dockerfile 进行了更新。
  • echo $BASH_VERSION 在你认为是sh 的shell 中输出什么?

标签: bash shell docker dockerfile


【解决方案1】:

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

docker container run -it ubuntu /bin/bash

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

【讨论】:

    猜你喜欢
    • 2017-03-29
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多