我是Docker的新手。我从以前的开发人员那里继承了一个很长的Dockerfile
,它有很多错误,我试图让它回到一个工作点。我注解掉了大部分文件,除了第一行:
FROM ubuntu:14.04
我做了以下工作:
docker build -t pm .
来构建图像-这是可行的,因为我可以在执行docker images
时看到图像docker run <image-id>
返回,没有错误或任何消息。现在我希望容器从镜像创建并启动。但当我执行docker ps -a
时,它显示容器已退出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b 05 f9727 f516 f216 cfb 59484“/bin/bash”大约1分钟前已退出(0)大约1分钟前
清醒雪莉
不知道为什么我不能得到一个正在运行的容器,为什么它在docker run
命令后一直停止。
1.执行docker logs <container_id>
不会显示任何内容-它只是返回,没有任何输出。
6条答案
按热度按时间vu8f3i0k1#
你的Docker镜像实际上没有做任何事情,容器在完成它的工作时停止。因为这里没有前台进程运行它会启动然后立即停止。为了确认你的容器没有问题,尝试将下面的代码放入
docker-compose.yml
(与Dockerfile
在同一个文件夹中)并运行docker-compose up
,现在你会看到你的容器正在运行而没有退出。请看这里的Docker官方教程,它将指导你如何使用Docker。
hi3rlvi22#
尝试
docker run -it <image> /bin/bash
在容器中运行shell。这对你来说没什么用,但它会告诉你发生了什么:一旦你退出 shell ,它也会退出容器。
你的容器基本上什么都不做:它有一个Ubuntu映像,但没有ENTRYPOINT或CMD命令来运行“something”容器在运行时是短暂的:它们运行单个命令并在命令完成时退出。
uurv41yg3#
Docker容器分类如下。
1.基于任务:当容器启动时,它将开始处理,并完成该过程,然后退出。
1.背景容器:它会等待一些请求。
因为你没有提供你的docker文件,所以我假设你只有一个声明。
你的build语句create image with name pm.
1.现在你运行docker run pm,它将启动container并停止,因为你没有提供任何入口点。
1.现在试试这个这是一个命令提示符或终端。
打开另一个终端或命令提示符。
1.如果你想看到容器持续运行,那么使用下面的图片。(这只是一个例子)
上面一行运行一个包含Nginx镜像的容器,当你打开浏览器http://localhost:8099时,你可以看到响应。
rggaifut4#
Docker容器与它们正在运行的进程密切相关。此进程由Docker文件上的“CMD”部分指定。此进程的PID为“1”。如果您终止它,则您的容器将被终止。如果您没有容器,则您的容器将立即停止。在您的情况下,您必须“覆盖”您的CMD。您可以通过以下简单的操作来完成此操作:“docker run -it ubuntu:18.04 bash”.“-it”是强制性的,因为它允许将stdin附加到您的容器。
玩得开心Docker
db2dz4w85#
Dockerfile的每一条指令都是一个容器中的一个层,它执行一些任务。在你的docker文件中,它只是加载ubuntu,当你运行docker时,在几秒钟内完成,并在进程完成后退出。所以如果想让你的容器一直运行,那么你的docker中应该有一个前台进程在运行。为了测试,如果你运行
docker run <imageid> echo hi
它将返回输出,这意味着你的容器是好的。1l5u6lss6#
这里有三种方法:
检查
CMD
是否为长时间运行的进程确保您的
CMD
或ENTRYPOINT
是一个长时间运行或阻塞的进程(例如,启动应用服务器),否则它将只是运行,然后容器将停止。使用
-t
选项尝试使用
-t
选项。示例为
CMD
指令添加长时间运行的命令您可以在
CMD
指令中放置一个长时间运行或阻塞的进程。例如,如果这是您的CMD指令:然后你可以像这样添加
&& tail -f /dev/null
:这只是给
CMD
一个长时间运行的进程,从而保持容器的运行。打开另一个终端窗口,运行docker ps
以查看容器的运行情况。备注