2016-05-15 71 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 –