2016-05-15 90 views
1

我构建了一个hazelcast码头集装箱。但是当我运行hazelcast容器时,它仅打印一些没有真正运行的起始日志。 的Dockerfile是:hazelcast码头集装箱不能连续运行

#centos7_jdk7 is a centos7 operating system installing jdk7 
FROM tianshangdeyun/centos7_jdk7 
#hazelcast-3.6.1 is download from hazelcast offical site 
COPY hazelcast-3.6.1 /hazelcast-3.6.1 
#add start hazelcast script 
COPY run.sh /run.sh 
RUN chmod 777 /run.sh 
expose 5701 
CMD ["/run.sh"] 

的run.sh是:

#!/bin/bash 
/hazelcast-3.6.1/bin/server.sh 

我运行 '搬运工运行hazelcast:3.6.1' 的hazelcast容器。 日志是打印是: enter image description here 但'码头ps'看不到过程。 祝你的帮助。

回答

1

问题是server.sh启动了未在前台运行的java应用程序。这意味着server.sh启动服务器,退出本身,所以你的run.sh脚本也会退出,并且docker认为工作已经完成并退出,即使hazelcast仍在运行。在docker化某些应用程序时,这是一个常见问题。

据我所知,我没有看到一种本地方式在前台运行hazelcast。你可以做的是修改server.sh。在这种情况下,修饰是很容易的,所有你需要做的是增加在server.sh一个等待 声明,朝年底,echo $! > ${PID_FILE}

if [ -z "${PID}" ]; then 
    echo "Process id for hazelcast instance is written to location: {$PID_FILE}" 
    $RUN_JAVA -server $JAVA_OPTS com.hazelcast.core.server.StartServer & 
    echo $! > ${PID_FILE} 
    wait 
else 
    echo "Another hazelcast instance is already started in this folder. To start a new instance, please unzip 3.6.1.zip/tar.gz in a new folder." 
    exit 0 
fi 

后等待语句将等到Java应用程序被终止,然后返回,所以你的run.sh将返回,你的码头容器将退出。 试试吧,它会工作!

+0

随应用程序(本例中为'server.sh')一起启动的脚本会随着更新的版本而频繁更改。我的答案可能不适用于3.6.1以外的版本 –

+0

这就是要点。谢谢你@Christophe Schmitz –