Issue in executing puppeteer in headful mode in Docker

后端 未结 1 933
失恋的感觉
失恋的感觉 2020-12-10 23:03

I am new to puppeteer and docker. I am facing an issue while setting up puppeteer in headful mode in docker container.

Puppeteer version: 1.6.2 Platform / OS         


        
相关标签:
1条回答
  • 2020-12-10 23:51

    Check the following Dockerfile, read the comments. It should run properly.

    # First, we need to make sure all dependencies are there. If you are using docker, then the important dependencies are already present on most node images. 
    FROM node:8
    
    # To run Headful mode, you will need to have a display, which is not present in a server. 
    # To avoid this, we will use Xvfb, and create a fake display, so the chrome will think there is a display and run properly. 
    # So we just need to install Xvfb and Puppeteer related dependencies.
    RUN apt-get update && apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget x11vnc x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps xvfb
    
    # I am going to ignore dumb-init or such for now since it will add complexities to understand what is actually needed here. 
    
    # Assuming we are working on /app folder, cd into /app
    WORKDIR /app
    
    # Copy package.json into app folder
    COPY package.json /app
    
    # Install dependencies
    RUN npm install 
    
    COPY . /app
    
    # Start server on port 3000
    EXPOSE 3000
    
    # I'll also assume you are going to use root user, 
    # and your script has `--no-sandbox` and `--disable-setuid-sandbox` arguments.
    # We run a fake display and run our script.
    # Start script on Xvfb
    CMD xvfb-run --server-args="-screen 0 1024x768x24" npm start
    

    Then I run it with following command,

    # build the app
    sudo docker build -t app . 
    
    # start the container, expose to network and remove after running
    sudo docker run --network=host -it app
    

    Sample result from our script that I used above, it can be any script,

    Step 8/8 : CMD xvfb-run --server-args="-screen 0 1024x768x24" npm start
     ---> Using cache
     ---> b1319f0e68ef
    Successfully built b1319f0e68ef
    Successfully tagged scraper:latest
    
    > puppeteer-with-xvfb@1.1.0 start /app
    > node index.js
    
    Example app listening on port 3000!
    > Opening browser
    > Navigating url
    > Typing text
    > Wait for results
    > Extracted data
    > Cleaning up instances
    
    0 讨论(0)
提交回复
热议问题