问题描述
我在后台运行一个容器,使用
I run a container in the background using
docker run -d --name hadoop h_Service
它很快退出。但是如果我在前台运行,它可以正常工作。我使用
it exits quickly. But if I run in the foreground, it works fine. I checked logs using
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
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
推荐答案
码头箱容器在其主进程完成时退出。
A docker container exits when its main process finishes.
在这种情况下,当您的 start-all.sh
脚本结束时,它将退出。在这种情况下,我不太了解hadoop来告诉你怎么做,但你需要在前台运行某些东西,或者使用一个进程管理器(如runit或supervisord)来运行进程。
In this case it will exit when your start-all.sh
script ends. I don't know enough about hadoop to tell you how to do it in this case, but you need to either leave something running in the foreground or use a process manager such as runit or supervisord to run the processes.
如果您不指定 -d
,我认为您必须误以为工作正常它应该有完全相同的效果。我怀疑你用一个稍微不一样的命令启动它,或者使用 -it
来改变它们。
I think you must be mistaken about it working if you don't specify -d
; it should have exactly the same effect. I suspect you launched it with a slightly different command or using -it
which will change things.
一个简单的解决方案可能会添加以下内容:
A simple solution may be to add something like:
while true;做睡眠1000完成
到脚本的末尾。我不喜欢这个脚本,因为脚本应该正在监控它启动的进程。
to the end of the script. I don't like this however, as the script should really be monitoring the processes it kicked off.
(我应该说我从)
这篇关于为什么码头集装箱立即出口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!