Ignite 运行 in Docker (is: General Java-Docker issue)
Ignite running in Docker (is: General Java-Docker issue)
我正在尝试 运行 在 Docker 容器(Mac OS X,Docker 1.9.1)中点燃 git:
# 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
并使用以下命令 运行 安装图像后,容器 'hangs'
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。是否有其他以某种方式自动启动导致锁定威胁从而使应用程序无法退出的东西?
这似乎是 docker 一般 java 的问题,另请参阅:
https://github.com/docker/docker/issues/18180
可能的几种解决方案:
如下创建一个 docker 机器并 运行 它在这里 (cfr. https://github.com/docker/docker/issues/18180#issuecomment-162568282):
docker-machine create -d virtualbox --engine-storage-driver overlay overlaymachine
在每个主要方法的末尾添加System.exit(0)显式(参见https://github.com/docker/docker/issues/18180#issuecomment-161129296)
等待下一个docker补丁版本(https://github.com/docker/docker/issues/18180#issuecomment-170656525)
我认为(目前)将 System.exit 添加到 Ignite 中的所有主要方法是一个很好的做法,因为这通常独立于 docker 或 linux 上的替代 hack (linux 内核需要 AUFS 升级,在此之前许多机器可能会落后)。这样未来的 Ignite 版本也可以安全地安装在旧内核上。
我正在尝试 运行 在 Docker 容器(Mac OS X,Docker 1.9.1)中点燃 git:
# 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
并使用以下命令 运行 安装图像后,容器 'hangs'
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。是否有其他以某种方式自动启动导致锁定威胁从而使应用程序无法退出的东西?
这似乎是 docker 一般 java 的问题,另请参阅: https://github.com/docker/docker/issues/18180
可能的几种解决方案:
如下创建一个 docker 机器并 运行 它在这里 (cfr. https://github.com/docker/docker/issues/18180#issuecomment-162568282):
docker-machine create -d virtualbox --engine-storage-driver overlay overlaymachine
在每个主要方法的末尾添加System.exit(0)显式(参见https://github.com/docker/docker/issues/18180#issuecomment-161129296)
等待下一个docker补丁版本(https://github.com/docker/docker/issues/18180#issuecomment-170656525)
我认为(目前)将 System.exit 添加到 Ignite 中的所有主要方法是一个很好的做法,因为这通常独立于 docker 或 linux 上的替代 hack (linux 内核需要 AUFS 升级,在此之前许多机器可能会落后)。这样未来的 Ignite 版本也可以安全地安装在旧内核上。