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
答案 0 :(得分:2)
您使用cassandra
作为切入点,但您也将其发送到后台:
/root/apache-cassandra-3.9/bin/cassandra -R & >> naresh.txt
因此,该行立即返回。对于Docker,一旦命令完成,容器就完成了它的目的,因此容器被关闭。
防止这种情况的可能方法:
&
(假设cassandra一直在前台运行并且不分叉)将cassandra放在前台cassandra.sh
末尾添加另一个永不返回的命令(一个好的候选人是tail -f <some logfile>
)waitpid
<强>更新强>
关于等待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键出来。我们如何在容器中解决这个问题。请建议