Docker容器立即退出

时间:2017-07-11 13:15:11

标签: 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 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

2 个答案:

答案 0 :(得分:2)

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

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

因此,该行立即返回。对于Docker,一旦命令完成,容器就完成了它的目的,因此容器被关闭。

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

  • 通过省略&(假设cassandra一直在前台运行并且不分叉)将cassandra放在前台
  • cassandra.sh末尾添加另一个永不返回的命令(一个好的候选人是tail -f <some logfile>
  • 使用waitpid
  • 等待cassandra

<强>更新

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

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

(我从the startup script used in the official Docker images for Oracle RDBMS

中偷走了这个想法

答案 1 :(得分:0)

@Frank,很棒.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()

[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键出来。我们如何在容器中解决这个问题。请建议