node-html-pdf icon indicating copy to clipboard operation
node-html-pdf copied to clipboard

Docker ENOENT error on alpine

Open AlessandroAnnini opened this issue 6 years ago • 9 comments

Hi, I am trying with this dockerfile:

FROM mhart/alpine-node:11.2.0

RUN npm -g config set user root
ENV NODE_PATH=/usr/lib/node_modules

RUN npm install -g html-pdf
RUN npm list -g --depth 0

WORKDIR /usr/src/app
COPY package.json package-lock.json ./

ENV NODE_ENV=production
RUN npm install --only=production
RUN npm audit fix

COPY . .
EXPOSE 8080
CMD ["node", "index.js"]

It installs everything correctly but when I try to use html-pdf I am still getting this error:

{
  Error: spawn /node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs ENOENT
  at Process.ChildProcess._handle.onexit(internal/child_process.js: 246: 19)
  at onErrorNT(internal /child_process.js: 421: 16)
  at process.internalTickCallback(internal/process/next_tick.js: 72: 19)
  errno: 'ENOENT',
  code: 'ENOENT',
  syscall: 'spawn /node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs',
  path: '/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs',
  spawnargs: ['/node_modules/html-pdf/lib/scripts/pdf_a4_portrait.js']
}

I am not setting any phantomPath to html-pdf create options.

I am trying this on https://zeit.co/

RUN npm list -g --depth 0 is returning an empty list

If this problem is unsolvable I could use another image! I have a working container using node:8.11.1 but it is a 800Mb image and I need something smaller. What would you use?

AlessandroAnnini avatar Nov 27 '18 16:11 AlessandroAnnini

Probably my answer could be helpful for somebody.

I've tried to run html-pdf on quay.io/aptible/nodejs and experienced not exactly the same issue, but relative one. It also was ENOENT for phantomjs.

I haven't noticed at once, but in my case it tried to run phantomjs.exe instead of phantomjs that of course doesn't work in linux container. So setting phantomPath in config object for pdf.create helped. But of course it is still a hack...

Ann40a avatar Dec 13 '18 11:12 Ann40a

great

nasir03082409229 avatar Jan 11 '19 14:01 nasir03082409229

great

Great console.log("Great")

nasir03082409229 avatar Jan 11 '19 14:01 nasir03082409229

Has anyone solved this issue

yashm123 avatar Aug 21 '19 07:08 yashm123

I was facing same issue. Resolve after fontConfg installing in .dockerfile

RUN apk --update add fontconfig ttf-dejavu

links https://github.com/marcbachmann/node-html-pdf/issues/212#issuecomment-279933124 https://github.com/gliderlabs/docker-alpine/issues/360

sameerAhmad9291 avatar Jan 31 '20 11:01 sameerAhmad9291

RUN wget -qO "https://github.com/dustinblackman/phantomized/releases/download/2.1.1a/dockerized-phantomjs.tar.gz" | tar xz -C /

ArtashMardoyan avatar Jun 01 '20 12:06 ArtashMardoyan

I reached the below link trying to solve my issue as mentioned by @sameerAhmad9291 @yogieputra8's comment: https://github.com/marcbachmann/node-html-pdf/issues/212#issuecomment-279933124 But there it has commands(apt-get) than do not work in alpine based docker image Hence we need to download and install phantomjs on our own. I mentioned this in a comment in that issue My comment: https://github.com/marcbachmann/node-html-pdf/issues/212#issuecomment-764752380 and also mentioning it again below


If you are using a docker image like Alpine which cannot run apt-get you can use RUN apk method and install phantom js by using installing curl & downloading it inside the docker building process.

#Add this to your docker file
RUN apk add --no-cache curl && \
    cd /tmp && curl -Ls https://github.com/dustinblackman/phantomized/releases/download/2.1.1/dockerized-phantomjs.tar.gz | tar xz && \
    cp -R lib lib64 / && \
    cp -R usr/lib/x86_64-linux-gnu /usr/lib && \
    cp -R usr/share /usr/share && \
    cp -R etc/fonts /etc && \
    curl -k -Ls https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 | tar -jxf - &&\
    cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs && \
    rm -fR phantomjs-2.1.1-linux-x86_64 && \
    apk del curl

Also you can refer the discussion here: https://gist.github.com/vovimayhem/6437c2f03b654e392ccf3e9903eba6af I have added final commands that worked for me in comment below the gist: https://gist.github.com/vovimayhem/6437c2f03b654e392ccf3e9903eba6af#gistcomment-3601962

abhi5658 avatar Jan 21 '21 16:01 abhi5658

https://github.com/marcbachmann/node-html-pdf/issues/612#issuecomment-854249720

zander-br avatar Jun 03 '21 23:06 zander-br

Alpine linux (especially in k8s) seems to be notorious for DNS issues. See https://betterprogramming.pub/why-i-will-never-use-alpine-linux-ever-again-a324fd0cbfd6

I have firsthand experience with ENOENT errors when using alpine in k8s. When switching to a non-alpine-based base image (in my case node:18-slim instead of node:18-alpine), ENOENT errors disappeared completely.

mondash avatar Mar 12 '23 07:03 mondash