1. ホーム
  2. docker

[解決済み】ドッカーコンテナがすぐに終了してしまう理由

2022-02-18 15:02:01

質問

を使ってコンテナをバックグラウンドで動かしています。

 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やsupervisordなどのプロセスマネージャを使用してプロセスを実行する必要があります。

を指定しないと動作しないと勘違いしているのではないでしょうか? -d

-it

while true; do sleep 1000; done

をスクリプトの末尾に追加します。しかし、私はこの方法が好きではありません。なぜなら、スクリプトは本来、自分がキックオフしたプロセスを監視すべきものだからです。

(から盗んできたと言うべきでしょう)。 https://github.com/sequenceiq/hadoop-docker/blob/master/bootstrap.sh )