Skip to content

Instantly share code, notes, and snippets.

@chuongtrh
Last active January 18, 2020 13:55
Show Gist options
  • Save chuongtrh/c5cc7d239a1fc54c7dadcf77541a6eb9 to your computer and use it in GitHub Desktop.
Save chuongtrh/c5cc7d239a1fc54c7dadcf77541a6eb9 to your computer and use it in GitHub Desktop.
Run puppeteer on docker with node:8.9-alpine
FROM node:8.9-alpine
RUN apk update && apk upgrade && \
echo http://nl.alpinelinux.org/alpine/latest-stable/community >> /etc/apk/repositories && \
echo http://nl.alpinelinux.org/alpine/latest-stable/main >> /etc/apk/repositories && \
apk add --no-cache \
zlib-dev \
xvfb \
xorg-server \
dbus \
ttf-freefont \
chromium \
nss \
ca-certificates \
dumb-init
# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true
# Help prevent zombie chrome processes
ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 /usr/local/bin/dumb-init
RUN chmod +x /usr/local/bin/dumb-init
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# COPY package.json .
# For npm@5 or later, copy package-lock.json as well
COPY package.json package-lock.json ./
RUN npm install --production
# Bundle app source
COPY . .
# Set Environment
ENV NODE_ENV=dev
# Puppeteer v1.4.0 works with Chromium 68.
RUN npm install puppeteer@1.4.0
# Add user so we don't need --no-sandbox.
RUN addgroup -S pptruser && adduser -S -g pptruser pptruser \
&& mkdir -p /home/pptruser/Downloads \
&& chown -R pptruser:pptruser /home/pptruser \
&& chown -R pptruser:pptruser /usr/src/app
# Run everything after as non-privileged user.
USER pptruser
EXPOSE 4200
ENTRYPOINT ["dumb-init", "--"]
CMD [ "npm", "start" ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment