我想尝试在Docker中的Ubuntu内部安装程序
所以我直接在命令提示符下运行
docker run --name ubuntu_test ubuntu:16.04
docker exec -it ubuntu_test bash
但是它不起作用,它说容器没有运行?如何在不设置dockerfile的情况下运行bash? (我尝试使用dockerfile,但由于interactive installer problem而无法使用)
所以我想也许可以直接从bash安装它。
答案 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
):
现在,您可以附加到正在运行的容器并执行一些操作:
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