我有这个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的最简单方法。
建议?
答案 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