如何在Docker中运行Ubuntu 16.04而不使用命令?

4
我想尝试在Docker中安装Ubuntu内的程序, 所以我只需直接从命令提示符运行。
docker run --name ubuntu_test ubuntu:16.04
docker exec -it ubuntu_test bash

但是它不起作用,它说容器没有运行?我怎样才能在不设置Dockerfile的情况下运行bash?(我尝试使用Dockerfile,但由于交互式安装程序问题而无法工作。)
所以我想也许直接从bash安装它可以工作。
5个回答

7
你的命令有问题,它既不能保持进程运行,也不能将其保留在后台,以至于容器完成工作并停止运行。这就像执行 docker run hello-world 命令一样,打印一些内容后退出。 docker run -it --name ubuntu_test ubuntu:16.04 可以解决问题。 文档 解释道:
对于交互式进程(如 shell),必须同时使用 -i -t 以为容器进程分配一个 tty,通常写成 -it。
另一种方式是以分离模式(-d)运行容器,并给它一个长时间运行的命令,使其不会立即退出: docker run --name ubuntu_test -d ubuntu:16.04 sleep 300 docker exec -it ubuntu_test bash

7

您无法启动容器。请尝试以下操作:

docker run -itd ubuntu:16.04 bash

-i, --interactive - 即使未连接,保持STDIN开启

-t, --tty - 分配一个伪终端

-d, --detach - 在后台运行容器并打印容器ID

执行此命令后列出所有容器(docker ps):

enter image description here

现在您可以连接到正在运行的容器并进行一些操作:
docker exec -it 82d0bb7754e7 /bin/bash

在这种情况下,为了表示容器,我使用了ID,您也可以使用容器名称。

1
我不确定,你安装到正在运行的镜像上是正确的。这种方法不太方便,因为它不是自动化的 - 下次需要使用镜像时,您将不得不再次执行所有步骤,并且无法记录它们。
我建议尝试解决交互式安装程序问题,您不是第一个面对此问题的人。有很多方法,包括使用yes程序自动输出预定义的答案以回答安装程序的问题,或者您可以直接使用echo将结果传输到安装程序。

1
这应该可以工作:
docker run --rm -it --name ubuntu_test -d ubuntu:16.04 
docker exec -it ubuntu_test /bin/bash

1
当您运行一个容器时,可以在命令的结尾处传递一个应该运行的命令,例如:
docker run --name ubuntu_test -it ubuntu:16.04 bash

如果在Dockerfile中指定了入口点(Entrypoint),则需要覆盖entrypoint:
docker run --name ubuntu_test -it --entrypoint bash ubuntu:16.04

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接