Docker容器在'docker start'之后不断停止

时间:2018-10-23 18:49:18

标签: docker docker-compose dockerfile

我刚接触Docker。我有一个很长的Dockerfile,我是从以前的开发人员那里继承的,它有很多错误,我正在尝试使其恢复正常工作。除了第一行,我注释掉了文件的大部分内容:

FROM ubuntu:14.04

我做了以下事情:

  1. docker build -t pm .来构建图像-之所以起作用,是因为执行docker images时我可以看到图像
  2. docker run <image-id>返回没有错误或任何消息。现在,我期望从图像创建容器并启动容器。但是当我执行docker ps -a时,它显示容器已退出:
CONTAINER ID        IMAGE               COMMAND             CREATED    STATUS                          PORTS               NAMES 
     

b05f9727f516 f216cfb59484“ / bin / bash”关于   分钟前退出(0)大约一分钟前
  lucid_shirley

不确定为什么我不能得到一个正在运行的容器,为什么在docker run命令之后它会继续停止。

  1. 执行docker logs <container_id>不会显示任何内容-它只会返回而没有任何输出。

5 个答案:

答案 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容器按以下方式分类。

  1. 基于任务:启动容器时,它将开始处理并完成该过程,然后退出。

  2. 背景容器:它将等待一些请求。

由于您未提供docker文件,因此我假设您只有一条语句。

FROM ubuntu:14.04

您的构建语句创建名称为pm的映像。

  1. 现在运行 泊坞窗运行pm 由于您没有提供任何入口点,它将启动容器并停止。

  2. 现在尝试这个 这是一个命令提示符或终端。

    docker run -it pm /bin/bash
    

    打开另一个终端或命令提示符。

    docker ps ( Now you will see there is one container).
    
  3. 如果要查看容器正在连续运行,请使用下图。 (这只是一个例子)

    docker run -d -p 8099:80 nginx 
    

以上一行运行一个带有Nginx图像的容器,当您打开浏览器http://localhost:8099时,您会看到响应。