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议