Docker容器正在退出

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

[root@ip-10-0-1-186 ~]# cat Dockerfile FROM centos:6 RUN yum install -y httpd RUN yum install -y centos-release-scl RUN yum install -y python27 RUN yum install -y java-1.8.0-openjdk ADD apache-cassandra-3.9/bin/cassandra /usr/local/bin ADD cassandra.sh /usr/local RUN chmod 755 /usr/local/cassandra.sh EXPOSE 7000 7001 7199 9042 9160 WORKDIR /root/apache-cassandra-3.9/bin CMD ["/usr/local/cassandra.sh"]

 [root@ip-10-0-1-186 ~]# cat cassandra.sh #!/bin/sh /root/apache-cassandra-3.9/bin/cassandra -R & >> naresh.txt 

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

 /root/apache-cassandra-3.9/bin/cassandra -R & >> naresh.txt 

因此,这一行立即返回。 对于Docker来说,只要命令完成,容器已经达到了目的,因此容器就closures了。

可能的方法来防止这一点:

  • 通过省略& (假定cassandra继续在前台运行而不分叉),将cassandra放在前台,
  • 在你的cassandra.sh的末尾添加一个永不返回的命令(一个好的候选项是tail -f <some logfile>
  • 等待卡彭德拉waitpid

UPDATE

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

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

(我从Oracle RDBMS官方Docker镜像中使用的启动脚本中偷取了这个想法)

@Frank,great.Container正在运行。将cassandra.sh更改为[root@ip-10-0-1-186 ~]# cat cassandra.sh #! /bin/sh /root/apache-cassandra-3.9/bin/cassandra -R >> naresh.txt tail -f naresh.txt waitpid() #! /bin/sh /root/apache-cassandra-3.9/bin/cassandra -R >> naresh.txt tail -f naresh.txt waitpid()

[root@ip-10-0-1-186 ~]# docker run -itd -v /root/apache-cassandra-3.9:/root/apache-cassandra-3.9 --name=cassan_waita cassan_waita ff5a5ed919f9873bbac6785e92b30d6a9039b6d8001d4e399b10b49608cf7725

[root@ip-10-0-1-186 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ff5a5ed919f9 cassan_waita "/usr/local/cassan..." 6 seconds ago Up 5 seconds 7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp cassan_waita

但是当我尝试附着在容器上时,它的悬挂如此激动,那么它给出错误

[root@ip-10-0-1-186 ~]# docker attach cassan_waita ^C/usr/local/cassandra.sh: line 5: syntax error: unexpected end of file

waitpid()命令看起来有问题。 这里实际上cassandra在启动后挂起,如果我们手动启动,我们需要按ENTER键出来。 我们如何在容器中解决这个问题。 请build议