在Docker中运行Ignite(是:一般的Java-Docker问题)
我试图在git中提交的Docker容器(Mac OS X,Docker 1.9.1)中运行点火:
# Start from a Java image. FROM java:7 # Ignite version ENV IGNITE_VERSION 1.5.0-b1 WORKDIR /opt/ignite ADD http://www.us.apache.org/dist/ignite/1.5.0-b1/apache-ignite-fabric-1.5.0-b1-bin.zip /opt/ignite/ignite.zip # Ignite home ENV IGNITE_HOME /opt/ignite/apache-ignite-fabric-1.5.0-b1-bin RUN unzip ignite.zip RUN rm ignite.zip # Copy sh files and set permission ADD ./run.sh $IGNITE_HOME/ RUN chmod +x $IGNITE_HOME/run.sh CMD $IGNITE_HOME/run.sh
在将其本地构build到apache/ignite
并使用以下命令运行映像后,容器“挂起”
docker run --expose=4700-4800 -it -p 47500-47600:47500-47600 -p 47100-47200:47100-47200 --net=host -e "CONFIG_URI=https://raw.githubusercontent.com/apache/ignite/master/examples/config/example-default.xml" apacheignite/ignite-docker
当连接到容器( docker exec -ti apache/ignite /bin/bash
)并通过bash在详细模式下运行命令时,它挂在org.apache.ignite.startup.cmdline.CommandLineRandomNumberGenerator
:
bash -x /opt/ignite/apache-ignite-fabric-1.5.0-b1-bin/bin/ignite.sh https://raw.githubusercontent.com/apache/ignite/master/examples/config/example-default.xml
输出地点挂起:
+ CP='/opt/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/*:/opt/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/*:/opt/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/*:/opt/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/licenses/*' ++ /usr/bin/java -cp '/opt/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/*:/opt/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/*:/opt/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/*:/opt/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/licenses/*' org.apache.ignite.startup.cmdline.CommandLineRandomNumberGenerator
看看CommandLineRandomNumberGenerator
的代码,我没有看到任何特殊的东西,只是一行来生成一个UUID。 是否还有其他的东西是以某种方式自动启动,导致locking威胁,使应用程序无法退出?
这似乎是一般的Java的docker问题,另请参阅: https : //github.com/docker/docker/issues/18180
可能的解决scheme
-
创build一个docker机器,并在这里运行(cfr。https: //github.com/docker/docker/issues/18180#issuecomment-162568282 ):
docker-machine创build-d virtualbox –engine-storage-driver覆盖overlaymachine
-
在每个主要方法的最后添加System.exit(0)(cfr。https ://github.com/docker/docker/issues/18180#issuecomment-161129296 )
-
等待下一个docker补丁版本( https://github.com/docker/docker/issues/18180#issuecomment-170656525 )
我认为将System.exit添加到Ignite中的所有主要方法是一种很好的做法(因为这是独立于docker或linux上的替代黑客)(linux内核需要AUFS升级,而许多机器可能会在此之前落后) 。 这样未来的Ignite版本也可以安全地安装在较旧的内核上。