基础环境是 alpine-node:6,要把 Phantomjs 部署到该服务器上,发现直接在 package.json 里加上 phantomjs-prebuilt 的依赖是不能运行的。
网络搜了一轮,发现是 Phantomjs 在 alpine linux 上是有问题的,找到这个 issue,尝试把下面这段加到 Dockerfile 里:
RUN apk update && apk add --no-cache fontconfig curl curl-dev && \
mkdir -p /usr/share && \
cd /usr/share \
&& curl -L https://github.com/Overbryd/docker-phantomjs-alpine/releases/download/2.11/phantomjs-alpine-x86_64.tar.bz2 | tar xj \
&& ln -s /usr/share/phantomjs/phantomjs /usr/bin/phantomjs \
&& phantomjs --version
的确在加入这段之后,它能找到 phantomjs 了,但是执行 createPage 的操作时并不返回,不清楚是不是哪个 package 里的 bug,打开 debug 之后,发现 send 事件之后是没有 receive 事件的,NOOP command 也仅仅发送一次,也就是说 phantomjs 没有收到命令,或者收到了没有反应。由于缺乏上下文,不清楚网上其它人是怎么能跑起来的,没办法,只好另寻它路。
然后搜到这个代码片段,它里面是使用了 phantomized,试了一下这段代码:
# 2: Download+Install PhantomJS, as the npm package 'phantomjs-prebuilt' won't work on alpine!
# See https://github.com/dustinblackman/phantomized
RUN set -ex \
&& apk add --no-cache --virtual .build-deps ca-certificates openssl \
&& wget -qO- "https://github.com/dustinblackman/phantomized/releases/download/2.1.1/dockerized-phantomjs.tar.gz" | tar xz -C / \
&& npm install -g phantomjs \
&& apk del .build-deps
这次终于能运行了。