PDF-Export Application Problem (Experimental PDF-Export with Docker)

Thank you!

I’ve looked through the Docker Hub page and there it is: --disalbe-gpu is already set in the default entrypoint. So perhaps I have to enable it…

If I figure it out I let the community know what is going wrong here :slight_smile:

If the docker container runs on the same host as xwiki and xwiki is NOT itself in a container:

  1. Install Docker
  2. Add your tomcat-User (tomcat9?) to the docker group to allow starting and stopping a container
  3. pull the image once (zenika/alpine-chrome:latest)
  4. add the config from the extension page to xwiki.properties (as provided)
  5. install the extension in the XWiki administration
  6. Restart tomcat

If the docker container runs on the same host as xwiki and xwiki is itself in a container:

  1. pull the image once (zenika/alpine-chrome:latest)
  2. add the config from the extension page to xwiki.properties and
    2.1 specify the host that the Chrome container can use to access XWiki. (IP or Name of the XWiki Container)
    2.2 Set export.pdf.dockerNetwork=bridge to the network the xwiki-container is running in
  3. install the extension
  4. Restart the xwiki docker container

Does this help you?

(There is a third option where xwiki and headless-chrome docker container run on different machines. But for this please adapt the steps above and add ip addresses to the config )

Hi @TheBob , see PDF Export Application (XWiki.org) for the different requirements to get it working.

We’re planning to remove that default Docker requirement in the future so that it works OOB without any configuration change, and explaining to Admin users how to set it up using docker if they need that.

Note that this extension is currently experimental, see PDF Export Application (XWiki.org)

what post?

Thanks

you don’t need that, xwiki does it by itself in managed mode (the default mode).

you also don’t need that, unless you want to change the default config.

1 Like

Only if you want to use the docker mode.

You shouldn’t need to do that either.

Basically all you need to do if you’re using the default mode (no config change) is what is described at PDF Export Application (XWiki.org)

1 Like

No Restart required after changing something in xwiki.properties?

With “docker mode”: Do you mean server-side generation of the pdf?

For an unknown reason it did not do the first pull. Starting and stopping works fine though.

The only reason I see to change xwiki.properties is if you don’t want to use the default mode.

1 Like

I mean the mode that is not using docker, i.e. PDF Export Application (XWiki.org)

That’s weird and should be reported since it would be a bug. Maybe you could try again? Could it be that you didn’t let it enough time to do the pull and stopped xwiki before it could finish?

Sure, i can try it again at the weekend. Good question. I can’t say if I have waited long enough :sweat_smile:

Hello to you both,
I have tested both, with and without docker. One is installed on my Synology with docker and I test it like you described it @jwielsch. (everything internal Docker)
I test with changing xwiki.porperties or not and installing zenika/alpine-chrome:latest or not.
I get this error on Docker Versions:

cat log.xml 
<org.xwiki.logging.event.BeginLogEvent>
  <marker class="org.xwiki.logging.marker.BeginTranslationMarker">
    <name>job.log.beginWithId</name>
    <references class="linked-hash-set">
      <org.slf4j.helpers.BasicMarker>
        <name>xwiki.begin</name>
        <referenceList class="java.util.concurrent.CopyOnWriteArrayList" serialization="custom">
          <java.util.concurrent.CopyOnWriteArrayList>
            <default/>
            <int>0</int>
          </java.util.concurrent.CopyOnWriteArrayList>
        </referenceList>
      </org.slf4j.helpers.BasicMarker>
    </references>
    <translationKey>job.log.beginWithId</translationKey>
  </marker>
  <message>Starting job of type [{}] with identifier [{}]</message>
  <argumentArray>
    <string>export/pdf</string>
    <java.util.Arrays_-ArrayList>
      <a class="string-array">
        <string>export</string>
        <string>pdf</string>
        <string>1661329242452-786</string>
      </a>
    </java.util.Arrays_-ArrayList>
  </argumentArray>
  <level>INFO</level>
  <timeStamp>1661329242466</timeStamp>
</org.xwiki.logging.event.BeginLogEvent>
<org.xwiki.logging.event.LogEvent>
  <level>ERROR</level>
  <timeStamp>1661329252514</timeStamp>
  <message>Exception thrown during job execution</message>
  <marker class="org.xwiki.logging.marker.TranslationMarker">
    <name>xwiki.translation</name>
    <translationKey>job.log.exception</translationKey>
  </marker>
  <throwable class="java.lang.RuntimeException">
    <detailMessage>Failed to get [role = [org.xwiki.export.pdf.PDFPrinter&lt;java.net.URL&gt;] hint = [docker]]</detailMessage>
    <cause class="org.xwiki.component.manager.ComponentLookupException">
      <detailMessage>Failed to lookup component [org.xwiki.export.pdf.internal.docker.DockerPDFPrinter] identified by type [org.xwiki.export.pdf.PDFPrinter&lt;java.net.URL&gt;] and hint [docker]</detailMessage>
      <cause class="org.xwiki.component.phase.InitializationException">
        <detailMessage>Failed to initialize the Chrome remote debugging service.</detailMessage>
        <cause class="java.util.concurrent.TimeoutException">
          <detailMessage>Timeout waiting for Chrome remote debugging to become available. Waited [10] seconds.</detailMessage>
          <stackTrace>
            <trace>org.xwiki.export.pdf.internal.chrome.ChromeManager.waitForChromeService(ChromeManager.java:166)</trace>
            <trace>org.xwiki.export.pdf.internal.chrome.ChromeManager.connect(ChromeManager.java:136)</trace>
            <trace>org.xwiki.export.pdf.internal.docker.DockerPDFPrinter.initializeChromeService(DockerPDFPrinter.java:135)</trace>
            <trace>org.xwiki.export.pdf.internal.docker.DockerPDFPrinter.initialize(DockerPDFPrinter.java:95)</trace>
            <trace>org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)</trace>
            <trace>org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)</trace>
            <trace>org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)</trace>
            <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)</trace>
            <trace>org.xwiki.component.embed.GenericProvider.getInstance(GenericProvider.java:111)</trace>
            <trace>org.xwiki.component.embed.GenericProvider.get(GenericProvider.java:100)</trace>
            <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.saveAsPDF(PDFExportJob.java:162)</trace>
            <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.runInternal(PDFExportJob.java:115)</trace>
            <trace>org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:243)</trace>
            <trace>org.xwiki.job.AbstractJob.run(AbstractJob.java:220)</trace>
            <trace>java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)</trace>
            <trace>java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)</trace>
            <trace>java.base/java.lang.Thread.run(Unknown Source)</trace>
          </stackTrace>
        </cause>
        <stackTrace>
          <trace>org.xwiki.export.pdf.internal.docker.DockerPDFPrinter.initializeChromeService(DockerPDFPrinter.java:137)</trace>
          <trace>org.xwiki.export.pdf.internal.docker.DockerPDFPrinter.initialize(DockerPDFPrinter.java:95)</trace>
          <trace>org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)</trace>
          <trace>org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)</trace>
          <trace>org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)</trace>
          <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)</trace>
          <trace>org.xwiki.component.embed.GenericProvider.getInstance(GenericProvider.java:111)</trace>
          <trace>org.xwiki.component.embed.GenericProvider.get(GenericProvider.java:100)</trace>
          <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.saveAsPDF(PDFExportJob.java:162)</trace>
          <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.runInternal(PDFExportJob.java:115)</trace>
          <trace>org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:243)</trace>
          <trace>org.xwiki.job.AbstractJob.run(AbstractJob.java:220)</trace>
          <trace>java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)</trace>
          <trace>java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)</trace>
          <trace>java.base/java.lang.Thread.run(Unknown Source)</trace>
        </stackTrace>
      </cause>
      <stackTrace>
        <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:204)</trace>
        <trace>org.xwiki.component.embed.GenericProvider.getInstance(GenericProvider.java:111)</trace>
        <trace>org.xwiki.component.embed.GenericProvider.get(GenericProvider.java:100)</trace>
        <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.saveAsPDF(PDFExportJob.java:162)</trace>
        <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.runInternal(PDFExportJob.java:115)</trace>
        <trace>org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:243)</trace>
        <trace>org.xwiki.job.AbstractJob.run(AbstractJob.java:220)</trace>
        <trace>java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)</trace>
        <trace>java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)</trace>
        <trace>java.base/java.lang.Thread.run(Unknown Source)</trace>
      </stackTrace>
    </cause>
    <stackTrace>
      <trace>org.xwiki.component.embed.GenericProvider.get(GenericProvider.java:103)</trace>
      <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.saveAsPDF(PDFExportJob.java:162)</trace>
      <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.runInternal(PDFExportJob.java:115)</trace>
      <trace>org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:243)</trace>
      <trace>org.xwiki.job.AbstractJob.run(AbstractJob.java:220)</trace>
      <trace>java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)</trace>
      <trace>java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)</trace>
      <trace>java.base/java.lang.Thread.run(Unknown Source)</trace>
    </stackTrace>
  </throwable>
</org.xwiki.logging.event.LogEvent>
<org.xwiki.logging.event.EndLogEvent>
  <marker class="org.xwiki.logging.marker.EndTranslationMarker">
    <name>job.log.endWithId</name>
    <references class="linked-hash-set">
      <org.slf4j.helpers.BasicMarker>
        <name>xwiki.end</name>
        <referenceList class="java.util.concurrent.CopyOnWriteArrayList" serialization="custom">
          <java.util.concurrent.CopyOnWriteArrayList>
            <default/>
            <int>0</int>
          </java.util.concurrent.CopyOnWriteArrayList>
        </referenceList>
      </org.slf4j.helpers.BasicMarker>
    </references>
    <translationKey>job.log.endWithId</translationKey>
  </marker>
  <message>Finished job of type [{}] with identifier [{}]</message>
  <argumentArray>
    <string>export/pdf</string>
    <java.util.Arrays_-ArrayList>
      <a class="string-array">
        <string>export</string>
        <string>pdf</string>
        <string>1661329242452-786</string>
      </a>
    </java.util.Arrays_-ArrayList>
  </argumentArray>
  <level>INFO</level>
  <timeStamp>1661329252520</timeStamp>
</org.xwiki.logging.event.EndLogEvent>

And the other test is under Ubuntu 20.04 without docker I described in my early post: PDF Template - Content of Page based on encyclopaedia

I know that it is experimental, and I would like to test it to help you.
I can wait for a new version and test it again.

Many thanks in advance
TheBob

This is the root cause but we need to understand why. I’ve added some debug logs for XWiki 14.7+: [Misc] Add debug information to better understand the timeout cause · xwiki/xwiki-platform@7f27e56 · GitHub

I haven’t worked on this code and @mflorea is the best person to help on this. It could be a bug that would need reporting in jira.

Hello @all,
I have installed now latest xwiki:14.7-postgres-tomcat on my synology docker with latest pdf export. Nothing else no config change, no installation of zenika/alpine-chrome:latest.

This is the last Log:

cat log.xml 
<org.xwiki.logging.event.BeginLogEvent>
  <marker class="org.xwiki.logging.marker.BeginTranslationMarker">
    <name>job.log.beginWithId</name>
    <references class="linked-hash-set">
      <org.slf4j.helpers.BasicMarker>
        <name>xwiki.begin</name>
        <referenceList class="java.util.concurrent.CopyOnWriteArrayList" serialization="custom">
          <java.util.concurrent.CopyOnWriteArrayList>
            <default/>
            <int>0</int>
          </java.util.concurrent.CopyOnWriteArrayList>
        </referenceList>
      </org.slf4j.helpers.BasicMarker>
    </references>
    <translationKey>job.log.beginWithId</translationKey>
  </marker>
  <message>Starting job of type [{}] with identifier [{}]</message>
  <argumentArray>
    <string>export/pdf</string>
    <java.util.Arrays_-ArrayList>
      <a class="string-array">
        <string>export</string>
        <string>pdf</string>
        <string>1661867067533-585</string>
      </a>
    </java.util.Arrays_-ArrayList>
  </argumentArray>
  <level>INFO</level>
  <timeStamp>1661867067960</timeStamp>
</org.xwiki.logging.event.BeginLogEvent>
<org.xwiki.logging.event.LogEvent>
  <level>ERROR</level>
  <timeStamp>1661867071260</timeStamp>
  <message>Exception thrown during job execution</message>
  <marker class="org.xwiki.logging.marker.TranslationMarker">
    <name>xwiki.translation</name>
    <translationKey>job.log.exception</translationKey>
  </marker>
  <throwable class="java.lang.RuntimeException">
    <detailMessage>Failed to get [role = [org.xwiki.export.pdf.PDFPrinter&lt;java.net.URL&gt;] hint = [chrome]]</detailMessage>
    <cause class="org.xwiki.component.manager.ComponentLookupException">
      <detailMessage>Failed to lookup component [org.xwiki.export.pdf.internal.chrome.ChromePDFPrinter] identified by type [org.xwiki.export.pdf.PDFPrinter&lt;java.net.URL&gt;] and hint [chrome]</detailMessage>
      <cause class="org.xwiki.component.manager.ComponentLookupException">
        <detailMessage>Failed to lookup component [org.xwiki.export.pdf.internal.chrome.ChromeManagerProvider] identified by type [javax.inject.Provider&lt;org.xwiki.export.pdf.internal.chrome.ChromeManager&gt;] and hint [default]</detailMessage>
        <cause class="org.xwiki.component.phase.InitializationException">
          <detailMessage>Failed to initialize the Docker container for the PDF export.</detailMessage>
          <cause class="java.lang.RuntimeException">
            <detailMessage>java.io.IOException: com.sun.jna.LastErrorException: [2] No such file or directory</detailMessage>
            <cause class="java.io.IOException">
              <detailMessage>com.sun.jna.LastErrorException: [2] No such file or directory</detailMessage>
              <cause class="com.sun.jna.LastErrorException">
                <detailMessage>[2] No such file or directory</detailMessage>
                <stackTrace>
                  <trace>com.github.dockerjava.transport.LinuxDomainSocket.connect(Native Method)</trace>
                  <trace>com.github.dockerjava.transport.LinuxDomainSocket.connect(LinuxDomainSocket.java:49)</trace>
                  <trace>com.github.dockerjava.transport.DomainSocket.open(DomainSocket.java:69)</trace>
                  <trace>com.github.dockerjava.transport.DomainSocket.&lt;init&gt;(DomainSocket.java:59)</trace>
                  <trace>com.github.dockerjava.transport.LinuxDomainSocket.&lt;init&gt;(LinuxDomainSocket.java:41)</trace>
                  <trace>com.github.dockerjava.transport.DomainSocket.get(DomainSocket.java:140)</trace>
                  <trace>com.github.dockerjava.transport.UnixSocket.get(UnixSocket.java:29)</trace>
                  <trace>com.github.dockerjava.httpclient5.ApacheDockerHttpClientImpl$2.createSocket(ApacheDockerHttpClientImpl.java:153)</trace>
                  <trace>org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:125)</trace>
                  <trace>org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:396)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint(InternalExecRuntime.java:158)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint(InternalExecRuntime.java:168)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.ConnectExec.execute(ConnectExec.java:136)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(ProtocolExec.java:175)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec.execute(HttpRequestRetryExec.java:96)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute(ContentCompressionExec.java:133)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.RedirectExec.execute(RedirectExec.java:115)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:170)</trace>
                  <trace>org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:67)</trace>
                  <trace>com.github.dockerjava.httpclient5.ApacheDockerHttpClientImpl.execute(ApacheDockerHttpClientImpl.java:191)</trace>
                  <trace>com.github.dockerjava.httpclient5.ApacheDockerHttpClient.execute(ApacheDockerHttpClient.java:9)</trace>
                  <trace>com.github.dockerjava.core.DefaultInvocationBuilder.execute(DefaultInvocationBuilder.java:228)</trace>
                  <trace>com.github.dockerjava.core.DefaultInvocationBuilder.get(DefaultInvocationBuilder.java:202)</trace>
                  <trace>com.github.dockerjava.core.DefaultInvocationBuilder.get(DefaultInvocationBuilder.java:74)</trace>
                  <trace>com.github.dockerjava.core.exec.ListContainersCmdExec.execute(ListContainersCmdExec.java:44)</trace>
                  <trace>com.github.dockerjava.core.exec.ListContainersCmdExec.execute(ListContainersCmdExec.java:15)</trace>
                  <trace>com.github.dockerjava.core.exec.AbstrSyncDockerCmdExec.exec(AbstrSyncDockerCmdExec.java:21)</trace>
                  <trace>com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:35)</trace>
                  <trace>org.xwiki.export.pdf.internal.docker.ContainerManager.exec(ContainerManager.java:303)</trace>
                  <trace>org.xwiki.export.pdf.internal.docker.ContainerManager.maybeReuseContainerByName(ContainerManager.java:95)</trace>
                  <trace>org.xwiki.export.pdf.internal.chrome.ChromeManagerProvider.initializeChromeDockerContainer(ChromeManagerProvider.java:88)</trace>
                  <trace>org.xwiki.export.pdf.internal.chrome.ChromeManagerProvider.initialize(ChromeManagerProvider.java:75)</trace>
                  <trace>org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)</trace>
                  <trace>org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)</trace>
                  <trace>org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)</trace>
                  <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)</trace>
                  <trace>org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:399)</trace>
                  <trace>org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)</trace>
                  <trace>org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)</trace>
                  <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)</trace>
                  <trace>org.xwiki.component.embed.GenericProvider.getInstance(GenericProvider.java:111)</trace>
                  <trace>org.xwiki.component.embed.GenericProvider.get(GenericProvider.java:100)</trace>
                  <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.saveAsPDF(PDFExportJob.java:162)</trace>
                  <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.runInternal(PDFExportJob.java:115)</trace>
                  <trace>org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:246)</trace>
                  <trace>org.xwiki.job.AbstractJob.run(AbstractJob.java:223)</trace>
                  <trace>java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)</trace>
                  <trace>java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)</trace>
                  <trace>java.base/java.lang.Thread.run(Unknown Source)</trace>
                </stackTrace>
              </cause>
              <stackTrace>
                <trace>com.github.dockerjava.transport.DomainSocket.&lt;init&gt;(DomainSocket.java:63)</trace>
                <trace>com.github.dockerjava.transport.LinuxDomainSocket.&lt;init&gt;(LinuxDomainSocket.java:41)</trace>
                <trace>com.github.dockerjava.transport.DomainSocket.get(DomainSocket.java:140)</trace>
                <trace>com.github.dockerjava.transport.UnixSocket.get(UnixSocket.java:29)</trace>
                <trace>com.github.dockerjava.httpclient5.ApacheDockerHttpClientImpl$2.createSocket(ApacheDockerHttpClientImpl.java:153)</trace>
                <trace>org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:125)</trace>
                <trace>org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:396)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint(InternalExecRuntime.java:158)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint(InternalExecRuntime.java:168)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.ConnectExec.execute(ConnectExec.java:136)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(ProtocolExec.java:175)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec.execute(HttpRequestRetryExec.java:96)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute(ContentCompressionExec.java:133)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.RedirectExec.execute(RedirectExec.java:115)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:170)</trace>
                <trace>org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:67)</trace>
                <trace>com.github.dockerjava.httpclient5.ApacheDockerHttpClientImpl.execute(ApacheDockerHttpClientImpl.java:191)</trace>
                <trace>com.github.dockerjava.httpclient5.ApacheDockerHttpClient.execute(ApacheDockerHttpClient.java:9)</trace>
                <trace>com.github.dockerjava.core.DefaultInvocationBuilder.execute(DefaultInvocationBuilder.java:228)</trace>
                <trace>com.github.dockerjava.core.DefaultInvocationBuilder.get(DefaultInvocationBuilder.java:202)</trace>
                <trace>com.github.dockerjava.core.DefaultInvocationBuilder.get(DefaultInvocationBuilder.java:74)</trace>
                <trace>com.github.dockerjava.core.exec.ListContainersCmdExec.execute(ListContainersCmdExec.java:44)</trace>
                <trace>com.github.dockerjava.core.exec.ListContainersCmdExec.execute(ListContainersCmdExec.java:15)</trace>
                <trace>com.github.dockerjava.core.exec.AbstrSyncDockerCmdExec.exec(AbstrSyncDockerCmdExec.java:21)</trace>
                <trace>com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:35)</trace>
                <trace>org.xwiki.export.pdf.internal.docker.ContainerManager.exec(ContainerManager.java:303)</trace>
                <trace>org.xwiki.export.pdf.internal.docker.ContainerManager.maybeReuseContainerByName(ContainerManager.java:95)</trace>
                <trace>org.xwiki.export.pdf.internal.chrome.ChromeManagerProvider.initializeChromeDockerContainer(ChromeManagerProvider.java:88)</trace>
                <trace>org.xwiki.export.pdf.internal.chrome.ChromeManagerProvider.initialize(ChromeManagerProvider.java:75)</trace>
                <trace>org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)</trace>
                <trace>org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)</trace>
                <trace>org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)</trace>
                <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)</trace>
                <trace>org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:399)</trace>
                <trace>org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)</trace>
                <trace>org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)</trace>
                <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)</trace>
                <trace>org.xwiki.component.embed.GenericProvider.getInstance(GenericProvider.java:111)</trace>
                <trace>org.xwiki.component.embed.GenericProvider.get(GenericProvider.java:100)</trace>
                <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.saveAsPDF(PDFExportJob.java:162)</trace>
                <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.runInternal(PDFExportJob.java:115)</trace>
                <trace>org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:246)</trace>
                <trace>org.xwiki.job.AbstractJob.run(AbstractJob.java:223)</trace>
                <trace>java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)</trace>
                <trace>java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)</trace>
                <trace>java.base/java.lang.Thread.run(Unknown Source)</trace>
              </stackTrace>
            </cause>
            <stackTrace>
              <trace>com.github.dockerjava.httpclient5.ApacheDockerHttpClientImpl.execute(ApacheDockerHttpClientImpl.java:195)</trace>
              <trace>com.github.dockerjava.httpclient5.ApacheDockerHttpClient.execute(ApacheDockerHttpClient.java:9)</trace>
              <trace>com.github.dockerjava.core.DefaultInvocationBuilder.execute(DefaultInvocationBuilder.java:228)</trace>
              <trace>com.github.dockerjava.core.DefaultInvocationBuilder.get(DefaultInvocationBuilder.java:202)</trace>
              <trace>com.github.dockerjava.core.DefaultInvocationBuilder.get(DefaultInvocationBuilder.java:74)</trace>
              <trace>com.github.dockerjava.core.exec.ListContainersCmdExec.execute(ListContainersCmdExec.java:44)</trace>
              <trace>com.github.dockerjava.core.exec.ListContainersCmdExec.execute(ListContainersCmdExec.java:15)</trace>
              <trace>com.github.dockerjava.core.exec.AbstrSyncDockerCmdExec.exec(AbstrSyncDockerCmdExec.java:21)</trace>
              <trace>com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:35)</trace>
              <trace>org.xwiki.export.pdf.internal.docker.ContainerManager.exec(ContainerManager.java:303)</trace>
              <trace>org.xwiki.export.pdf.internal.docker.ContainerManager.maybeReuseContainerByName(ContainerManager.java:95)</trace>
              <trace>org.xwiki.export.pdf.internal.chrome.ChromeManagerProvider.initializeChromeDockerContainer(ChromeManagerProvider.java:88)</trace>
              <trace>org.xwiki.export.pdf.internal.chrome.ChromeManagerProvider.initialize(ChromeManagerProvider.java:75)</trace>
              <trace>org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)</trace>
              <trace>org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)</trace>
              <trace>org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)</trace>
              <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)</trace>
              <trace>org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:399)</trace>
              <trace>org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)</trace>
              <trace>org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)</trace>
              <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)</trace>
              <trace>org.xwiki.component.embed.GenericProvider.getInstance(GenericProvider.java:111)</trace>
              <trace>org.xwiki.component.embed.GenericProvider.get(GenericProvider.java:100)</trace>
              <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.saveAsPDF(PDFExportJob.java:162)</trace>
              <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.runInternal(PDFExportJob.java:115)</trace>
              <trace>org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:246)</trace>
              <trace>org.xwiki.job.AbstractJob.run(AbstractJob.java:223)</trace>
              <trace>java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)</trace>
              <trace>java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)</trace>
              <trace>java.base/java.lang.Thread.run(Unknown Source)</trace>
            </stackTrace>
          </cause>
          <stackTrace>
            <trace>org.xwiki.export.pdf.internal.chrome.ChromeManagerProvider.initializeChromeDockerContainer(ChromeManagerProvider.java:127)</trace>
            <trace>org.xwiki.export.pdf.internal.chrome.ChromeManagerProvider.initialize(ChromeManagerProvider.java:75)</trace>
            <trace>org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)</trace>
            <trace>org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)</trace>
            <trace>org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)</trace>
            <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)</trace>
            <trace>org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:399)</trace>
            <trace>org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)</trace>
            <trace>org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)</trace>
            <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)</trace>
            <trace>org.xwiki.component.embed.GenericProvider.getInstance(GenericProvider.java:111)</trace>
            <trace>org.xwiki.component.embed.GenericProvider.get(GenericProvider.java:100)</trace>
            <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.saveAsPDF(PDFExportJob.java:162)</trace>
            <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.runInternal(PDFExportJob.java:115)</trace>
            <trace>org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:246)</trace>
            <trace>org.xwiki.job.AbstractJob.run(AbstractJob.java:223)</trace>
            <trace>java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)</trace>
            <trace>java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)</trace>
            <trace>java.base/java.lang.Thread.run(Unknown Source)</trace>
          </stackTrace>
        </cause>
        <stackTrace>
          <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:204)</trace>
          <trace>org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:399)</trace>
          <trace>org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)</trace>
          <trace>org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)</trace>
          <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)</trace>
          <trace>org.xwiki.component.embed.GenericProvider.getInstance(GenericProvider.java:111)</trace>
          <trace>org.xwiki.component.embed.GenericProvider.get(GenericProvider.java:100)</trace>
          <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.saveAsPDF(PDFExportJob.java:162)</trace>
          <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.runInternal(PDFExportJob.java:115)</trace>
          <trace>org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:246)</trace>
          <trace>org.xwiki.job.AbstractJob.run(AbstractJob.java:223)</trace>
          <trace>java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)</trace>
          <trace>java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)</trace>
          <trace>java.base/java.lang.Thread.run(Unknown Source)</trace>
        </stackTrace>
      </cause>
      <stackTrace>
        <trace>org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:204)</trace>
        <trace>org.xwiki.component.embed.GenericProvider.getInstance(GenericProvider.java:111)</trace>
        <trace>org.xwiki.component.embed.GenericProvider.get(GenericProvider.java:100)</trace>
        <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.saveAsPDF(PDFExportJob.java:162)</trace>
        <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.runInternal(PDFExportJob.java:115)</trace>
        <trace>org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:246)</trace>
        <trace>org.xwiki.job.AbstractJob.run(AbstractJob.java:223)</trace>
        <trace>java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)</trace>
        <trace>java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)</trace>
        <trace>java.base/java.lang.Thread.run(Unknown Source)</trace>
      </stackTrace>
    </cause>
    <stackTrace>
      <trace>org.xwiki.component.embed.GenericProvider.get(GenericProvider.java:103)</trace>
      <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.saveAsPDF(PDFExportJob.java:162)</trace>
      <trace>org.xwiki.export.pdf.internal.job.PDFExportJob.runInternal(PDFExportJob.java:115)</trace>
      <trace>org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:246)</trace>
      <trace>org.xwiki.job.AbstractJob.run(AbstractJob.java:223)</trace>
      <trace>java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)</trace>
      <trace>java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)</trace>
      <trace>java.base/java.lang.Thread.run(Unknown Source)</trace>
    </stackTrace>
  </throwable>
</org.xwiki.logging.event.LogEvent>
<org.xwiki.logging.event.EndLogEvent>
  <marker class="org.xwiki.logging.marker.EndTranslationMarker">
    <name>job.log.endWithId</name>
    <references class="linked-hash-set">
      <org.slf4j.helpers.BasicMarker>
        <name>xwiki.end</name>
        <referenceList class="java.util.concurrent.CopyOnWriteArrayList" serialization="custom">
          <java.util.concurrent.CopyOnWriteArrayList>
            <default/>
            <int>0</int>
          </java.util.concurrent.CopyOnWriteArrayList>
        </referenceList>
      </org.slf4j.helpers.BasicMarker>
    </references>
    <translationKey>job.log.endWithId</translationKey>
  </marker>
  <message>Finished job of type [{}] with identifier [{}]</message>
  <argumentArray>
    <string>export/pdf</string>
    <java.util.Arrays_-ArrayList>
      <a class="string-array">
        <string>export</string>
        <string>pdf</string>
        <string>1661867067533-585</string>
      </a>
    </java.util.Arrays_-ArrayList>
  </argumentArray>
  <level>INFO</level>
  <timeStamp>1661867071278</timeStamp>
</org.xwiki.logging.event.EndLogEvent>

Many thanks in advanc
TheBob

This usually means that the user running XWiki (tomcat user in your case) is not allowed to access the Docker socket, which means XWiki can’t communicate with Docker. The solution is usually to add the tomcat user to the docker group, as @jwielsch mentioned above:

This usually means that XWiki cannot communicate with the headless Chrome web browser (running inside a Docker container), most probably because the IP / host used by XWiki to access Chrome is wrong. The fix depends on your setup: