0

我正在尝试在 git 中提交的 Docker 容器(Mac OS X,Docker 1.9.1)中运行 ignite:

# 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

在本地构建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。是否还有其他以某种方式自动启动的事情导致锁定威胁,从而使应用程序无法退出?

4

1 回答 1

1

一般来说,这似乎是 java 的 docker 问题,另请参阅: https ://github.com/docker/docker/issues/18180

几种可能的解决方案:

我认为(目前)将 System.exit 添加到 Ignite 中的所有主要方法是一个很好的做法,因为这通常独立于 docker 或 linux 上的替代黑客(linux 内核需要 AUFS 升级,并且许多机器可能在此之前落后) . 这样未来的 Ignite 版本也可以安全地安装在旧内核上。

于 2016-01-12T10:57:56.283 回答