DockerFile:启动后如何获取bash命令行?

时间:2017-01-18 09:35:22

标签: bash docker dockerfile

  

这个问题没有重复,因为我想获得一个交互式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 -a m我看到了我的图片

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 flags

我怎么能意识到这一点?

1 个答案:

答案 0 :(得分:3)

如果stdin已关闭,

bash将无法运行 。如果您未提供-i标记,bash将立即退出。所以当你...

docker run environment:full 

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

如果没有附加到tty,

bash将不会为您提供交互式提示。所以,如果你要跑...

coerk run -i environment:full

...你会得到一个bash shell,但没有提示,作业控制或其他功能。您需要为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