我有一个Dockerfile做CI。
它使用第三方tarball的内容,而该tarball又包含部分Java运行时(是的,它很丑)。
$ git clone xxx
$ cd xxx
$ docker build .
在一个主机上执行Dockerfile时需要"…/jre/…/server/libjvm. exe "。在另一台主机上执行时需要"…/jre/…/client/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。
有关详细信息,您可以查看另一个stackoverflow问题