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标志

我该如何认识到这一点?

+0

你确定它是/ bin/bash而不是/ usr/bin/bash?它在发行版之间有所不同。 –

+0

@nwinkler:添加了为什么它不是重复的问题的解释 – realtebo

+2

是否有你不想要'-it'标志的原因?在我看来,Docker只是以一种不分配tty的方式进行了优化,并且默认情况下不启用STDIN。在大多数情况下,你会想要这个默认行为。在你的情况下,它不是默认的,因此你需要标志。我认为这可能是Docker的潜在功能要求。 –

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

+1

谢谢!这是“不可能”情况下的一个典型答案。你已经解释了为什么,并且做得很好。 – realtebo