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