当前位置: 首页 > 面试题库 >

为什么Docker容器会立即退出

郑声
2023-03-14
问题内容

我在后台运行一个容器

 docker run -d --name hadoop h_Service

它迅速退出。但是,如果我在前台运行,则可以正常运行。我使用检查了日志

docker logs hadoop

没有错误。有任何想法吗?

DOCKERFILE

 FROM java_ubuntu_new
 RUN wget http://archive.cloudera.com/cdh4/one-click-install/precise/amd64/cdh4-repository_1.0_all.deb
 RUN dpkg -i cdh4-repository_1.0_all.deb
 RUN curl -s http://archive.cloudera.com/cdh4/ubuntu/precise/amd64/cdh/archive.key | apt-key add -
 RUN  apt-get update
 RUN apt-get install -y hadoop-0.20-conf-pseudo
 RUN dpkg -L hadoop-0.20-conf-pseudo
 USER hdfs
 RUN hdfs namenode -format
 USER root
 RUN apt-get install -y sudo
 ADD . /usr/local/
 RUN chmod 777 /usr/local/start-all.sh
 CMD ["/usr/local/start-all.sh"]

start-all.sh

 #!/usr/bin/env bash
 /etc/init.d/hadoop-hdfs-namenode start
 /etc/init.d/hadoop-hdfs-datanode start
 /etc/init.d/hadoop-hdfs-secondarynamenode start
 /etc/init.d/hadoop-0.20-mapreduce-tasktracker start
 sudo -u hdfs hadoop fs -chmod 777 /
 /etc/init.d/hadoop-0.20-mapreduce-jobtracker start
 /bin/bash

问题答案:

一个Docker容器的主要过程完成后退出。

在这种情况下,它将在start- all.sh脚本结束时退出。我对hadoop不太了解,无法在这种情况下告诉您如何做,但是您需要要么在前台运行某些东西,要么使用诸如runit或supervisor之类的流程管理器来运行流程

我认为,如果不指定-d,您一定会误以为它会起作用;它应该具有完全相同的效果。我怀疑您是用稍微不同的命令启动了它,或者使用-it它会改变某些情况。

一个简单的解决方案可能是添加如下内容:

while true; do sleep 1000; done

到脚本末尾。但是我不喜欢这样,因为脚本实际上应该监视启动的进程。

(我应该说我从https://github.com/sequenceiq/hadoop-
docker/blob/master/bootstrap.sh
窃取了该代码)



 类似资料:
  • 容器总是在创建和运行后立即退出。 我尝试使用命令运行mssql实例 当尝试类似的SO link link时 它显示 但在run命令中我已经设置了'accept_eula=y'。

  • 问题内容: 我正在尝试在Docker容器中运行.net core 1.0.0控制台应用程序。 当我从计算机上的Demo文件夹中运行命令时,它可以正常工作;但是当使用运行时,容器会立即退出。 我试图检查日志,它只是显示Console.WriteLine中的文本: 演示应用正在运行… 没什么 我已经将项目上传到https://github.com/learningdockerandnetcore/De

  • 问题内容: 我正在尝试学习如何将docker compose与nginx容器的简单设置结合使用,该设置将请求重新路由到ghost容器。我正在使用标准的鬼影图像,但是有一个自定义的nginx图像(继承自标准图像)。 当我使用“ docker-compose up”运行合成文件时,它会立即退出,而“ docker_nginx_1以代码0退出”。但是,当我手动构建并运行它时,它运行良好,并且可以将浏览器

  • 问题内容: 我有一个从Docker集线器提取的Docker映像。 当我运行时,容器立即退出。 我无权访问Docker映像的源代码,包括Dockerfile。我所拥有的只是我从中获得的图像。 我需要调试/查看映像中的内容(例如查看和浏览映像的文件系统),而无需将其作为容器运行。 可能吗? 问题答案: 从所需的图像启动容器,如下所示: 即使未连接STDIN仍保持打开状态 分配一个伪tty 梅子退出后停

  • 我想在容器启动时设置一些配置,为此我使用shell脚本。但我的容器将在脚本结束后立即退出,我尝试了-d标志/分离模式,但它永远不会在分离模式下运行。 下面是我的Dockerfile 下面是我的shell脚本 > 无旗奔跑 这将在我的控制台和出口打印“你好码头工人” 使用-itd标志运行 > 我看到的区别是在命令部分,当我运行其他图像时,命令部分将显示/bin/bash,并将在分离模式下继续。 当我