Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的docker CI图像不可复制/到处运行_Java_Docker_Boot2docker - Fatal编程技术网

Java 为什么我的docker CI图像不可复制/到处运行

Java 为什么我的docker CI图像不可复制/到处运行,java,docker,boot2docker,Java,Docker,Boot2docker,我有一个做CI的Dockerfile 它使用第三方tarball的内容,而第三方tarball又包含Java运行时的部分内容(是的,它很难看) 在执行过程中,一台主机上的Dockerfile需要“../jre/../strong>服务器/libjvm.so”,而在另一台主机上执行Dockerfile则需要该tarball中的“../jre/../strong>客户端/libjvm.so” Docker版本到处都是1.7.1 除了git repo文件夹(./)和tarball之外,没有任何内容添加

我有一个做CI的Dockerfile

它使用第三方tarball的内容,而第三方tarball又包含Java运行时的部分内容(是的,它很难看)

在执行过程中,一台主机上的Dockerfile需要“../jre/../strong>服务器/libjvm.so”,而在另一台主机上执行Dockerfile则需要该tarball中的“../jre/../strong>客户端/libjvm.so”

Docker版本到处都是1.7.1 除了git repo文件夹(./)和tarball之外,没有任何内容添加到容器中。 这怎么可能? 是否有任何隐式传递给docker的共享环境变量

Dockerfile的外观如下所示:

FROM ubuntu:14.04
...
WORKDIR /
RUN wget http://SOME-URL TOOL-PACKAGE
RUN tar xf TOOL-PACKAGE
...
# setup some envs
ENV
# extend PATH
ENV PATH $PATH: ... 
...
COPY ./ src
WORKDIR src
# use tool to generate some input files
RUN SOME-TOOL-BINARY-WHICH-USES-JRE
# continue build with make
RUN make

当您可以在构建过程中修改
java
执行时,您可以显式地传递
-client
-server
参数,以选择是使用客户机还是服务器JVM


有关详细信息,您可以查看。

您的
Dockerfile
的这一部分在构建Java应用程序时是什么样子的?在Docker外部(例如在控制台上)构建时,对两台主机的影响是否相同?对于“主机”和“运行Docker的主机”,所需的文件相同,但对于不同的主机,所需的文件不同。这对我来说很奇怪,因为容器应该完全隔离,不是吗?是的,容器进程总是独立运行。但它们仍然共享同一个系统内核。我不知道
java
程序根据哪些信息决定是选择服务器还是客户机JVM。也许这与您运行的内核有关。请看一下我关于如何指定JVM的回答,该JVM应该用于更具可复制性的构建。不幸的是,使用Java的“工具箱”是一个黑盒子,我无法控制使用哪种变体。我仍然在问自己,由于while“Toolbox”包是自包含的,docker容器是隔离的,这在不同的主机之间会有什么不同。但它们仍然共享主机的系统内核。意味着在两台主机上可能安装了不同的内核,这可能会影响
java
程序选择客户机或服务器JVM的策略。
FROM ubuntu:14.04
...
WORKDIR /
RUN wget http://SOME-URL TOOL-PACKAGE
RUN tar xf TOOL-PACKAGE
...
# setup some envs
ENV
# extend PATH
ENV PATH $PATH: ... 
...
COPY ./ src
WORKDIR src
# use tool to generate some input files
RUN SOME-TOOL-BINARY-WHICH-USES-JRE
# continue build with make
RUN make