DockerFile:启动后如何获得bash命令行?
此问题未重复,因为我想获取不带-it标志运行的交互式shell。DockerFile:启动后如何获得bash命令行?
我正在将第一步移到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 -a
米我看到我的形象
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
[email protected]:/# exit
我想有Ubuntu的提示,如果一样我在SSH连接。而这个没有用户必须输入-i或-tty标志。
我该如何认识到这一点?
bash
如果标准输入关闭,将不会运行。如果您不提供-i
标志,bash
将立即退出。所以,当你...
docker run environment:full
... bash立即退出,所以你的容器退出。如果您运行docker ps -a
,您会看到它,它显示已停止的容器。
bash
如果没有连接到tty,将不会给你一个交互提示。所以,如果你要运行...
coerk run -i environment:full
...你会得到一个bash
外壳,但没有提示,或作业控制,或者其他功能。您需要为Docker提供-t
以分配tty设备。
如果不在命令行中提供-i
和-t
选项,就无法获得所需内容。
另一种方法是设置一个运行ssh守护进程并将人员ssh放入容器的映像。它不会像“如果我在SSH连接中”那样行事,它实际上是一个ssh会话。
此外,请注意这一点:
docker run environment:full -ti
是不一样的:
docker run -it environment:full
前者将运行bash -ti
一个容器内,而后者经过-i
和-t
选项docker run
。
谢谢!这是“不可能”情况下的一个典型答案。你已经解释了为什么,并且做得很好。 – realtebo
你确定它是/ bin/bash而不是/ usr/bin/bash?它在发行版之间有所不同。 –
@nwinkler:添加了为什么它不是重复的问题的解释 – realtebo
是否有你不想要'-it'标志的原因?在我看来,Docker只是以一种不分配tty的方式进行了优化,并且默认情况下不启用STDIN。在大多数情况下,你会想要这个默认行为。在你的情况下,它不是默认的,因此你需要标志。我认为这可能是Docker的潜在功能要求。 –