0

I have a Spring Boot application where I use Playwright Java in. I can get it to work when I running it locally on my Windows machine but when I try to run in a docker container I get the following error:

Host system is missing dependencies to run browsers. ║
2023-02-16 23:30:37 ║ Missing libraries:                                   ║
2023-02-16 23:30:37 ║     libnss3.so                                       ║
2023-02-16 23:30:37 ║     libnssutil3.so

I try to run:

RUN apt-get install -y libnss3.so \ 
libnssutil3.so         \ 
libsmime3.so           \ 
libnspr4.so            \ 
libatk-1.0.so.0        \ 

but it only comes back with the same error. My Dockerfile looks like this:

FROM ubuntu:22.04

RUN apt-get install -y libnss3.so \ 
libnssutil3.so         \ 
libsmime3.so           \ 
libnspr4.so            \ 
&& apt-get clean && rm -rf /var/lib/apt/lists/*

FROM mcr.microsoft.com/playwright/java:v1.30.0-focal
FROM maven:3.8.3-openjdk-17
RUN mkdir /project
COPY . /project
WORKDIR /project
RUN mvn clean package -DskipTests
CMD ["java", "-jar", "target/controller-1.jar"]

I have alos tried this Dockerfile

FROM ubuntu:22.04    
RUN apt-get update && playwright install-deps    
FROM mcr.microsoft.com/playwright/java:v1.30.0-focal
FROM maven:3.8.3-openjdk-17
RUN mkdir /project
COPY . /project
WORKDIR /project
RUN mvn clean package -DskipTests
CMD ["java", "-jar", "target/controller-1.jar"]

with the same error.

Currently I just doing some test to see if I can get it to work so the class in the project where I use Playwright looks like this:

@Service
public class PlaywrightTest {

    Playwright playwright;

    public void testPlaywright() {

        playwright = Playwright.create();

        Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(true));
        BrowserContext context = browser.newContext();

        Page page = context.newPage();

        page.navigate("https://www.google.com/");

        System.out.println(page.title());

    }
}

When the application starts in docker it looks like this

2023-02-17 00:07:51 2023-02-16T23:07:51.131Z  INFO 1 --- [           main] s.g.a.ControllerApplication           : Started ControllerApplication in 2.693 seconds (process running for 3.142)
2023-02-17 00:07:52 BEWARE: your OS is not officially supported by Playwright; downloading fallback build.
2023-02-17 00:07:52 Downloading Chromium 110.0.5481.38 (playwright build v1045) from https://playwright.azureedge.net/builds/chromium/1045/chromium-linux.zip

.....downloading....

2023-02-17 00:08:35 Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-02-17 00:08:35 2023-02-16T23:08:35.032Z ERROR 1 --- [           main] o.s.boot.SpringApplication               : Application run failed
2023-02-17 00:08:35 
2023-02-17 00:08:35 java.lang.IllegalStateException: Failed to execute ApplicationRunner
2023-02-17 00:08:35     at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:761) ~[spring-boot-3.0.2.jar!/:3.0.2]
2023-02-17 00:08:35     at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:748) ~[spring-boot-3.0.2.jar!/:3.0.2]
2023-02-17 00:08:35     at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-3.0.2.jar!/:3.0.2]
2023-02-17 00:08:35     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) ~[spring-boot-3.0.2.jar!/:3.0.2]
2023-02-17 00:08:35     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) ~[spring-boot-3.0.2.jar!/:3.0.2]
2023-02-17 00:08:35     at se.demo.controller.controllerApplication.main(controllerApplication.java:15) ~[classes!/:1]
2023-02-17 00:08:35     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
2023-02-17 00:08:35     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
2023-02-17 00:08:35     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
2023-02-17 00:08:35     at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
2023-02-17 00:08:35     at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[controller-1.jar:1]
2023-02-17 00:08:35     at org.springframework.boot.loader.Launcher.launch(Launcher.java:95) ~[controller-1.jar:1]
2023-02-17 00:08:35     at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[controller-1.jar:1]
2023-02-17 00:08:35     at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) ~[controller-1.jar:1]
2023-02-17 00:08:35 Caused by: com.microsoft.playwright.PlaywrightException: Error {
2023-02-17 00:08:35   message='
2023-02-17 00:08:35 ╔══════════════════════════════════════════════════════╗
2023-02-17 00:08:35 ║ Host system is missing dependencies to run browsers. ║
2023-02-17 00:08:35 ║ Missing libraries:                                   ║
2023-02-17 00:08:35 ║     libnss3.so                                       ║
2023-02-17 00:08:35 ║     libnssutil3.so                                   ║
2023-02-17 00:08:35 ║     libsmime3.so                                     ║
2023-02-17 00:08:35 ║     libnspr4.so                                      ║
2023-02-17 00:08:35 ║     libatk-1.0.so.0                                  ║
2023-02-17 00:08:35 ║     libatk-bridge-2.0.so.0                           ║
2023-02-17 00:08:35 ║     libcups.so.2                                     ║
2023-02-17 00:08:35 ║     libdrm.so.2                                      ║
2023-02-17 00:08:35 ║     libdbus-1.so.3                                   ║
2023-02-17 00:08:35 ║     libatspi.so.0                                    ║
2023-02-17 00:08:35 ║     libX11.so.6                                      ║
2023-02-17 00:08:35 ║     libXcomposite.so.1                               ║
2023-02-17 00:08:35 ║     libXdamage.so.1                                  ║
2023-02-17 00:08:35 ║     libXext.so.6                                     ║
2023-02-17 00:08:35 ║     libXfixes.so.3                                   ║
2023-02-17 00:08:35 ║     libXrandr.so.2                                   ║
2023-02-17 00:08:35 ║     libgbm.so.1                                      ║
2023-02-17 00:08:35 ║     libxcb.so.1                                      ║
2023-02-17 00:08:35 ║     libxkbcommon.so.0                                ║
2023-02-17 00:08:35 ║     libpango-1.0.so.0                                ║
2023-02-17 00:08:35 ║     libcairo.so.2                                    ║
2023-02-17 00:08:35 ║     libasound.so.2                                   ║
2023-02-17 00:08:35 ╚══════════════════════════════════════════════════════╝
2023-02-17 00:08:35   name='Error
2023-02-17 00:08:35   stack='Error:
user982455
  • 11
  • 3
  • The first `FROM` sets up a multi-stage build; that image's contents are discarded when you get to the second `FROM` line. Assuming the final image is based on some sort of Debian-based distribution, you need to `RUN apt-get ...` after that final `FROM` line and not in an earlier build stage. (Also look up the correct package names on https://packages.debian.org.) – David Maze Feb 16 '23 at 23:22

1 Answers1

0

You must use mcr.microsoft.com/playwright/java:v1.30.0-focal provided by Microsoft Playwright team. It has jdk17, maven3 & required browsers to execute your test.

You can use the below snippet as Dockerfile to build your own container to run your test.

FROM mcr.microsoft.com/playwright/java:v1.30.0-focal
COPY . /e2e
WORKDIR /e2e
ENTRYPOINT /bin/bash

Build your own image using docker build -t=<DESIRED_IMAGE_NAME>

Create the container using docker run -v $PWD/<report_folder>:/e2e/<report_folder> -it --rm <DESIRED_IMAGE_NAME>

Now, you can run your maven command in the container bash - mvn clean verify