Docker Run:如何在没有命令的情况下运行Ubuntu:16.04?

时间:2019-01-14 09:26:43

标签: docker

我想尝试在Docker中的Ubuntu内部安装程序

所以我直接在命令提示符下运行

docker run --name ubuntu_test ubuntu:16.04
docker exec -it ubuntu_test bash

但是它不起作用,它说容器没有运行?如何在不设置dockerfile的情况下运行bash? (我尝试使用dockerfile,但由于interactive installer problem而无法使用)

所以我想也许可以直接从bash安装它。

5 个答案:

答案 0 :(得分:2)

问题在于您的命令不会使进程保持活动状态,也不会将其保持在后台,因此容器会完成其工作并停止运行。就像docker run hello-world一样,它会打印一些内容并退出。

docker run -it --name ubuntu_test ubuntu:16.04将为您服务。 documentation解释:

For interactive processes (like a shell), you must use -i -t together in order to allocate a tty for the container process. -i -t is often written -it

一种替代方法是以分离模式(-d)运行容器,并为其提供长时间运行的命令,以使其不会立即退出:

docker run --name ubuntu_test -d ubuntu:16.04 sleep 300 docker exec -it ubuntu_test bash

答案 1 :(得分:2)

您无法启动容器。试试这个:

docker run -itd ubuntu:16.04 bash
  

-i,--interactive-即使未连接STDIN也保持打开状态

     

-t,--tty-分配伪TTY

     

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

在此命令之后,列出所有容器(docker ps):

enter image description here

现在,您可以附加到正在运行的容器并执行一些操作:

docker exec -it 82d0bb7754e7 /bin/bash

(在这种情况下,要指明我使用ID的容器,也可以使用容器名称)

答案 2 :(得分:1)

运行容器时,可以在应运行的命令末尾传递命令,例如:

docker run --name ubuntu_test -it ubuntu:16.04 bash

如果在Dockerfile中指定了一个入口点,那么您需要覆盖入口点:

docker run --name ubuntu_test -it --entrypoint bash ubuntu:16.04

答案 3 :(得分:1)

我不确定,您是否正确安装了正在运行的映像。这是不方便的,因为它不是自动化的-下次需要图像时,您将不得不再次执行所有步骤,并且无法记录它们。

我建议改为尝试解决交互式安装程序的问题,您不是第一个遇到此问题的人。有很多方法,包括yes程序,它可以自动输出针对安装程序问题的预定义答案,或者您可以简单地使用echo将结果传递给安装程序。

答案 4 :(得分:0)

这应该可行:

docker run --rm -it --name ubuntu_test -d ubuntu:16.04 
docker exec -it ubuntu_test /bin/bash