我刚接触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
b05f9727f516 f216cfb59484“ / bin / bash”关于 分钟前退出(0)大约一分钟前
lucid_shirley
不确定为什么我不能得到一个正在运行的容器,为什么在docker run
命令之后它会继续停止。
docker logs <container_id>
不会显示任何内容-它只会返回而没有任何输出。答案 0 :(得分:2)
您的Docker映像实际上没有执行任何操作,容器在完成其工作时停止。由于此处没有任何正在运行的前台进程将启动,然后立即停止。
要确认您的容器没有问题,请尝试将以下代码放入docker-compose.yml
(与Dockerfile
相同的文件夹中)并运行docker-compose up
,现在您将看到容器正在运行而没有退出
version: '3'
services:
my-service:
build: .
tty: true
请在这里查看Docker official tutorial,它将指导您如何使用docker。
答案 1 :(得分:1)
Docker容器与它们正在运行的过程密切相关。此过程由Dockerfile上的“ CMD”部分指定。该过程的PID为“ 1”。如果您杀死它,则您的容器也将被杀死。如果您还没有,那么您的容器将立即停止。在您的情况下,您必须“替代”您的CMD。您可以使用简单的方法完成此操作:“ docker run -it ubuntu:18.04 bash”。 “ -it”是强制性的,因为它允许将stdin附加到您的容器中。
与docker玩得开心。
答案 2 :(得分:1)
尝试
pd.to_datetime(df.DateTime.str.replace(r'(?<=:)\s0', '0'))
在容器内运行外壳。
这对您没有多大帮助,但可以告诉您发生了什么:一旦退出外壳,它也会退出容器。
您的容器基本上不执行任何操作:它具有Ubuntu映像,但没有ENTRYPOINT或CMD命令来运行“某物” 容器在运行时是短暂的:它们运行一个命令,并在命令完成时退出。
答案 3 :(得分:1)
Dockerfile的每条指令是容器内执行某些任务的一层。在您的docker文件中,这只是加载ubuntu,当您在几秒钟内运行docker并从进程完成退出后,便完成了ubuntu的加载。因此,如果要让您的容器一直运行,则在docker中应该运行一个前台进程。 用于测试是否运行
docker run <imageid> echo hi
,它将返回输出,表示您的容器还可以。
答案 4 :(得分:0)
Docker容器按以下方式分类。
基于任务:启动容器时,它将开始处理并完成该过程,然后退出。
背景容器:它将等待一些请求。
由于您未提供docker文件,因此我假设您只有一条语句。
FROM ubuntu:14.04
您的构建语句创建名称为pm的映像。
现在运行 泊坞窗运行pm 由于您没有提供任何入口点,它将启动容器并停止。
现在尝试这个 这是一个命令提示符或终端。
docker run -it pm /bin/bash
打开另一个终端或命令提示符。
docker ps ( Now you will see there is one container).
如果要查看容器正在连续运行,请使用下图。 (这只是一个例子)
docker run -d -p 8099:80 nginx
以上一行运行一个带有Nginx图像的容器,当您打开浏览器http://localhost:8099时,您会看到响应。