在Docker映像中运行ubuntu 16.04 bash shell

时间:2019-09-18 20:07:27

标签: docker

我有这个Dockerfile:

FROM ubuntu:16.04

我跑步

docker build -t mine .

它建立了。然后我跑

docker exec -it mine /bin/bash

它说

Error: No such container: mine

我确定我缺少一些简单的东西,但是我已经用Google搜索了docker映像名称,运行了docker images,它显示了“容器ID”“我的”(标签为“最新” ),我研究了stackoverflow。这是如此基本,很难找到答案。

我正在OS X上运行docker 19.03.2,构建6a30dfc。

编辑:如果我运行docker run mine,它将运行并立即退出(当然,因为这就是Dockerfile所说的)。然后有一个容器(未运行)。然后,如果我通过id执行该容器,它会说“ Container ..hex .. is not running”,这是有道理的。

我想我想要在Ubuntu 16.04中运行bash shell的最简单方法。

建议?

3 个答案:

答案 0 :(得分:6)

Docker exec命令用于在正在运行的容器内执行命令。您只需要使用run docker run -it mine /bin/bash来使用容器。

如果您的最终目标是自己运行Ubuntu的bash,则可以跳过build阶段,而只需执行docker run -it ubuntu:16.04 /bin/bash

请注意-i-t标志。第一个表示您的容器化程序(即bash)可能会收到一些用户输入。因此,码头工人将保持其标准输入打开。第二个标志是使用Linux伪终端(PTY)作为命令的控制终端(即bash)。这些标志的组合使您可以拥有 normal 交互式shell体验。

答案 1 :(得分:2)

docker run mine命令背后的原因是,它将运行容器,但是将终止,因为它将不会分配伪tty

-t              : Allocate a pseudo-tty
-i              : Keep STDIN open even if not attached
  

对于交互式进程(如shell),必须同时使用-i -t   为了为容器进程分配一个tty。 -i -t通常   书面-如您在后面的示例中看到的。指定-t为   客户端从管道接收其标准输入时禁止使用,   如:

echo test | docker run -i busybox cat

因此,在您的情况下,您应该为ubuntu容器分配伪tty。

docker run --name my_ubuntu_container -it ubuntu bash

然后您可以运行

--tty , -t      Allocate a pseudo-TTY
docker exec -it my_ubuntu_container bash

答案 2 :(得分:1)

那是因为您需要先使用exec来运行它

docker run -it mine bash