Docker容器立即退出

Docker容器立即退出,docker,dockerfile,Docker,Dockerfile,使用 docker run-it-v/root/apache-cassandra-3.9:/root/apache-cassandra-3.9--name=cassan_8 cassan_8 但立即退出,事件中没有错误。 图像是从dockerfile创建的 [root@ip-10-0-1-186~]#cat Dockerfile 从centos开始:6 运行yum安装-y httpd 运行yum安装-y centos发布scl 运行yum安装-y python27 运行yum安装-y java-

使用
docker run-it-v/root/apache-cassandra-3.9:/root/apache-cassandra-3.9--name=cassan_8 cassan_8
但立即退出,事件中没有错误。 图像是从dockerfile创建的

[root@ip-10-0-1-186~]#cat Dockerfile
从centos开始:6
运行yum安装-y httpd
运行yum安装-y centos发布scl
运行yum安装-y python27
运行yum安装-y java-1.8.0-openjdk
添加apache-cassandra-3.9/bin/cassandra/usr/local/bin
添加cassandra.sh/usr/local
运行chmod 755/usr/local/cassandra.sh
暴露7000 7001 7199 9042 9160
WORKDIR/root/apache-cassandra-3.9/bin
CMD[“/usr/local/cassandra.sh”]


您使用的是
cassandra
作为入口点,但也将其发送到后台:

/root/apache-cassandra-3.9/bin/cassandra -R & >> naresh.txt
因此,该行立即返回。对于Docker,一旦命令完成,容器就完成了它的目的,因此,容器被关闭

防止这种情况的可能办法:

  • 通过省略
    &
    (假设cassandra一直在前台运行并且没有分叉)使cassandra保持在前台
  • cassandra.sh
    的末尾添加另一个永远不会返回的命令(一个好的候选命令是
    tail-f
  • waitpid
更新

关于等待卡桑德拉的建议不完整;一个完整的最小解决方案是:

/root/apache-cassandra-3.9/bin/cassandra -R & >> naresh.txt
childPID=$!
wait $childPID

(我从中窃取了这个想法)

您使用
cassandra
作为入口点,但您也将其发送到后台:

/root/apache-cassandra-3.9/bin/cassandra -R & >> naresh.txt
因此,该行立即返回。对于Docker,一旦命令完成,容器就完成了它的目的,因此,容器被关闭

防止这种情况的可能办法:

  • 通过省略
    &
    (假设cassandra一直在前台运行并且没有分叉)使cassandra保持在前台
  • cassandra.sh
    的末尾添加另一个永远不会返回的命令(一个好的候选命令是
    tail-f
  • waitpid
更新

关于等待卡桑德拉的建议不完整;一个完整的最小解决方案是:

/root/apache-cassandra-3.9/bin/cassandra -R & >> naresh.txt
childPID=$!
wait $childPID
(这个想法是我从别人那里偷来的)