Docker Phantomjs驱动程序访问

时间:2017-06-15 20:33:39

标签: java docker phantomjs

我有一个docker容器,它的spring-boot应用程序。从这个docker容器我想访问本地phantomjs驱动程序。当我在docker中运行我的容器时,它会给出'驱动程序可执行文件不存在:/ usr / bin / phantomjs'异常,但我的phantomjs驱动程序存在于此路径下。 这个docker容器如何访问' / usr / bin / phantomjs'文件? 我应该在docker文件中添加这行VOLUME / usr / bin / phantomjs吗? phantomjs版本是:2.1.1

1 个答案:

答案 0 :(得分:0)

在我的应用程序中有效的解决方案是

dockerfile

FROM openjdk:11
VOLUME /tmp
ARG JAR_FILE
COPY build/libs/*.jar app.jar
EXPOSE 8080 9090 8000

ENV PHANTOMJS_VERSION 2.1.1
RUN wget -q -O phantomjs.tar.bz2 https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 \
    && tar -f phantomjs.tar.bz2 -xj phantomjs-$PHANTOMJS_VERSION-linux-x86_64/bin/phantomjs \
    && mv phantomjs-$PHANTOMJS_VERSION-linux-x86_64/bin/phantomjs /usr/local/bin/ \
    && rm -rf phantomjs-$PHANTOMJS_VERSION-linux-x86_64 phantomjs.tar.bz2


ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000","-jar","/app.jar"]

然后我可以直接在Java phantomjs中使用spring-boot

我的Java代码

List<String> cmdArgs = new ArrayList<String>(5);
cmdArgs.add("phantomjs");

// Other code and other phantomjs args 

ProcessBuilder proc = new ProcessBuilder().inheritIO().command(cmdArgs.toArray(new String[] {}));
Process process = proc.start();

if (process.waitFor() == 0 || process.exitValue() == 0) // Wait for PhantomJS to complete 
{
    ok = true;
}
else
{
    errorMsg = String.valueOf(process.exitValue());
}