【问题标题】:DockerFile : how to get bash command line after start?DockerFile:启动后如何获取 bash 命令行?
【发布时间】:2017-01-18 09:35:21
【问题描述】:

这个问题不重复了,因为我想获得一个交互式shell而不用-it标志运行。

我正在向 Docker 迈出第一步,以创建仅供内部使用的映像。

我从这个envirornment_full.df开始:

FROM ubuntu:16.04
ENTRYPOINT ["/bin/bash"]

然后我构建

docker rmi environment:full
docker build -t environment:full  -f environment.df .

然后运行

docker run environment:full

跑步docker images -am 我看到了我的形象

REPOSITORY          TAG                 IMAGE ID            CREATED         SIZE
environment         full                aa91bbd39167        4 seconds ago   129 MB

所以我运行它

docker run environment:full 

我没有看到任何事情发生......

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED         STATUS                      PORTS               NAMES
5847c0a18f30        environment:full    "/bin/bash"         21 seconds ago  Exited (0) 20 seconds ago                       admiring_mirzakhani

还有

$ docker run environment:full -ti
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
root@aa768a585f33:/# exit

我想要 ubuntu 提示符,就像我在 SSH 连接中一样。而这个没有用户必须输入 -i 或 -tty 标志

我怎样才能意识到这一点?

【问题讨论】:

  • 你确定是 /bin/bash 而不是 /usr/bin/bash?它因发行版而异。
  • @nwinkler :添加了为什么它不是重复问题的解释
  • 您是否有不想要-it 标志的原因?在我看来,Docker 只是在默认情况下不分配 tty 并且不启用 STDIN 的方式进行了优化。在大多数情况下,您都需要这种默认行为。在您的情况下,它不是默认值,因此您需要标志。我认为这可能是对 Docker 的潜在功能要求。
  • @HubertGrzeskowiak:我正在从虚拟机“环境”迁移到 docker,所以我还没有完全理解 docker 的主要目标。我将继续学习和编码,以掌握 docker 哲学

标签: bash docker dockerfile


【解决方案1】:
如果标准输入关闭,

bash根本不会运行。如果您不提供-i 标志,bash 将立即退出。所以当你...

docker run environment:full 

...bash 立即退出,因此您的容器退出。如果你运行docker ps -a,你会看到它,它显示容器已经停止。

bash 不会给你一个交互式提示,如果它没有附加到一个 tty。所以如果你要跑...

coerk run -i environment:full

...你会得到一个bash shell,但没有提示、作业控制或其他功能。您需要提供-t 以便 Docker 分配 tty 设备。

如果在命令行中同时提供-i-t 选项,您将无法获得所需的内容。

另一种方法是设置一个运行 ssh 守护进程的映像,并让人们通过 ssh 进入容器。与其表现得“就像我在 SSH 连接中一样”,它实际上是一个 ssh 会话。

另外,请注意:

docker run environment:full -ti

和这个不一样:

docker run -it environment:full

前者将在容器内运行bash -ti,而后者将-i-t 选项传递给docker run

【讨论】:

  • 谢谢!这是“不可能”情况下的典型答案。您已经解释了原因并且做得很好。
猜你喜欢
  • 2021-07-26
  • 2013-06-22
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多