Ignition 8.3.0 Docker Designer Missing Perspective Property Editor

I have the following Dockerfile:

FROM docker.ci.artifacts.walmart.com/wce-docker/ca-roots:latest AS ca_roots

FROM hub.docker.prod.walmart.com/inductiveautomation/ignition:8.3.0 AS base

USER root

# Install Walmart Root CAs at OS level

COPY --from=ca_roots /usr/local/share/ca-certificates /usr/local/share/ca-certificates

COPY --from=ca_roots /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt

RUN rm -f /etc/ssl/cert.pem && ln -s /etc/ssl/certs/ca-certificates.crt /etc/ssl/cert.pem

# Install Walmart Root CAs at gateway level

COPY --from=ca_roots --chown=ignition:ignition /etc/ssl/certs/ca-certificates.crt /usr/local/bin/ignition/data/certificates/supplemental/ca-certificates.crt

# Copy modules, gateway config, and scripts, and set permissions

COPY --chown=ignition:ignition ./modules/. /usr/local/bin/ignition/user-lib/modules/

COPY --chown=ignition:ignition ./data/config/ /usr/local/bin/ignition/data/config/

COPY --chown=ignition:ignition ./data/projects/ /usr/local/bin/ignition/data/projects/

COPY --chown=ignition:ignition ./data/redundancy.xml /usr/local/bin/ignition/data/redundancy.xml

COPY --chown=ignition:ignition ./data/gateway.xml /usr/local/bin/ignition/data/gateway.xml

# Switch to non-root user `ignition`. Must use numeric ID for WCNP (ignition:ignition = 2003:2003)

USER 2003

And the following docker-compose.yml

version: '3.8'

services:

localGateway:

image: ignitiondockerfile 

build: ./

user: root

container_name: localGateway

ports:

  - 8088:8088

  - 8043:8043

  - 8060:8060

  - 80:80

  - 443:443

volumes:

  - gw-data:/usr/local/bin/ignition/data

environment:

  - ACCEPT_IGNITION_EULA=Y

  - GATEWAY_ADMIN_USERNAME=admin

  - GATEWAY_ADMIN_PASSWORD=password

  - IGNITION_EDITION=standard

  - TZ=America/Chicago

  - GATEWAY_RESTORE_DISABLED=False

  - DISABLE_QUICKSTART=True

entrypoint: \["docker-entrypoint.sh","-n","Ignition-Scada-83-beta","-m","14336","--","-Dignition.config.mode=Development","gateway.forceSecureRedirect=false","-XX:ActiveProcessorCount=10","-Duser.timezone=america/chicago"\]

volumes:

gw-data:

When I stand up this docker image with docker compose, it puts the gateway in “Development” mode which is what I want. When I launch the designer, two things are happening:

  1. The designer’s Perspective Property Editor is completely blank. I have deleted the .ignition folder and restarted the designer but that didn’t fix the issue.
  2. When I attempt to create a perspective view, where it should show the view being created it says “forbidden”.

I have stood up the docker image in “core” mode and launched the designer and had the same issues. I also stood up the just the docker image without adding the different folder/files (commented out) and had the same issues.

Not sure what I need to do from here, any help would be appreciated.

Look in your designer's "Output Console" tool window. There is almost certainly some kind of "Error launching JxBrowser".

When I open the Output Console, there are no errors. Here is the logs:

12:47:47.937 [WebSocket@1292770033-50] INFO com.inductiveautomation.ignition.client.gateway_interface.GatewayConnectionManager -- WebSocket session is connected
12:47:49.605 [Designer-Startup] INFO designer.main -- Downloading... [+0]
12:47:49.738 [Designer-Startup] INFO designer.main -- Cleanup... [+133]
12:47:49.749 [Designer-Startup] INFO designer.main -- Initializing UI... [+144]
12:47:49.803 [DesignerExecEngine-1] INFO tags.subscriptions -- Changing connected quality to 'Good'
12:47:50.877 [Designer-Startup] INFO designer.main -- Starting module: Vision [+1272]
12:47:52.876 [Designer-Startup] INFO designer.main -- Starting module: Perspective [+3271]
12:47:54.049 [Designer-Startup] INFO Perspective.Designer -- Starting up Perspective module. Mode: Trial
12:47:55.641 [Designer-Startup] INFO designer.main -- Starting module: SFC [+6036]
12:47:56.133 [Designer-Startup] INFO designer.main -- Starting module: Event Streams [+6528]
12:47:56.177 [Designer-Startup] INFO designer.main -- Starting module: Reporting [+6572]
12:47:56.221 [Designer-Startup] INFO reporting.Designer -- Starting up Reporting Module. Mode: Trial
12:47:56.428 [Designer-Startup] INFO designer.main -- Starting module: Symbol Factory [+6822]
12:47:56.431 [Designer-Startup] INFO designer.main -- Starting module: Alarm Notification [+6826]
12:47:56.533 [Designer-Startup] INFO designer.main -- Starting module: OPC-UA [+6928]
12:47:56.535 [Designer-Startup] INFO designer.main -- Starting module: Enterprise Administration [+6930]
12:47:56.544 [Designer-Startup] INFO designer.main -- Starting module: Legacy DNP3 Driver [+6939]
12:47:56.544 [Designer-Startup] INFO designer.main -- Starting module: Historian Core [+6939]
12:47:56.545 [Designer-Startup] INFO designer.main -- Starting module: SQL Bridge [+6940]
12:47:56.761 [Designer-Startup] INFO designer.main -- Starting module: Kafka Connector [+7156]
12:47:56.764 [Designer-Startup] INFO designer.main -- Starting module: WebDev [+7159]
12:47:56.773 [Designer-Startup] INFO designer.main -- Initializing Scripting... [+7168]
12:47:56.820 [Designer-Startup] INFO designer.main -- Initializing UI... [+7215]
12:47:56.831 [Designer-Startup] INFO com.inductiveautomation.ignition.designer.querybrowser.QueryBrowser -- No default datasource set for project. Set default in gateway and relaunch project.

When I try to add a perspective view:

And then when I navigate away from the “newView” the output logs are:

12:50:19.487 [AWT-EventQueue-0] INFO Perspective.Designer.Workspace -- Launching view with DesignerPageParams 'master', tab id 'newView', using base url http://localhost:8088/data/perspective/design
12:51:12.241 [Perspective-ViewWorkspace-1] ERROR ViewResourceEditor -- Unhandled exception in getObjectForSave()
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Unexpected return type; expected string, got null
at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)
at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.getObjectForSave(ViewResourceEditor.java:480)
at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.getObjectForSave(ViewResourceEditor.java:68)
at com.inductiveautomation.ignition.designer.tabbedworkspace.ResourceEditor.commit(ResourceEditor.java:180)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Unexpected return type; expected string, got null
at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.lambda$getObjectForSave$3(ViewResourceEditor.java:475)
at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.postComplete(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.complete(Unknown Source)
at com.inductiveautomation.perspective.designer.workspace.JavaJsBridge.lambda$invokeFunction$2(JavaJsBridge.java:288)
at com.teamdev.jxbrowser.frame.internal.FrameImpl$1.onNext(FrameImpl.java:359)
at com.teamdev.jxbrowser.frame.internal.FrameImpl$1.onNext(FrameImpl.java:355)
at com.teamdev.jxbrowser.internal.rpc.ServiceConnectionImpl.lambda$invokeAsync$6(ServiceConnectionImpl.java:229)
at com.teamdev.jxbrowser.internal.RpcThreadImpl$TaskRunner.processTasks(RpcThreadImpl.java:175)
... 1 common frames omitted
12:51:12.244 [Perspective-ViewWorkspace-1] ERROR com.inductiveautomation.ignition.client.util.gui.ErrorUtil -- Failed to commit changes to view 'com.inductiveautomation.perspective/views/newView'
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Unexpected return type; expected string, got null
at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)
at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.getObjectForSave(ViewResourceEditor.java:480)
at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.getObjectForSave(ViewResourceEditor.java:68)
at com.inductiveautomation.ignition.designer.tabbedworkspace.ResourceEditor.commit(ResourceEditor.java:180)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Unexpected return type; expected string, got null
at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.lambda$getObjectForSave$3(ViewResourceEditor.java:475)
at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.postComplete(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.complete(Unknown Source)
at com.inductiveautomation.perspective.designer.workspace.JavaJsBridge.lambda$invokeFunction$2(JavaJsBridge.java:288)
at com.teamdev.jxbrowser.frame.internal.FrameImpl$1.onNext(FrameImpl.java:359)
at com.teamdev.jxbrowser.frame.internal.FrameImpl$1.onNext(FrameImpl.java:355)
at com.teamdev.jxbrowser.internal.rpc.ServiceConnectionImpl.lambda$invokeAsync$6(ServiceConnectionImpl.java:229)
at com.teamdev.jxbrowser.internal.RpcThreadImpl$TaskRunner.processTasks(RpcThreadImpl.java:175)
... 1 common frames omitted
12:51:12.251 [Browser Thread: a774ca5e-59cc-4eb0-9eb5-38f358b2bf51] ERROR Perspective.Designer.Workspace -- level: LEVEL_ERROR
message: "store.DesignerViewInstance: Attempted to collect View Configuration for save, but root view not found!"
line_number: 2
source: "http://localhost:8088/res/perspective/js/PerspectiveClient.c5eb5a2782e4a5c4105b.js"

There is also no errors in the gateway logs.

Here is what the Perspective Property Editor looks like:

All of these are symptoms pointing to the same root cause - something is going wrong with JxBrowser, the web browser engine we embed inside the designer to work with Perspective.

It's surprising there's no logs...maybe the engine is running, but something in your environment is preventing the IPC?
Can you open the 'External Debugger', out of curiosity?

Another thing to try would be setting a more verbose JXB logging level:

Here are some of the final logs (there are a ton of logs after adding -Dignition.client.jxBrowser.logLevel=DEBUG to the JVM Arguments

13:22:04.558 DEBUG [Chromium] [67780:53084:0924/132204.558:WARNING:viz_main_impl.cc(85)] VizNullHypothesis is disabled (not a warning)
13:22:04.559 DEBUG [Chromium] [67780:53084:0924/132204.558:INFO:content_gpu_client.cc(47)] ContentGpuClient::PostCompositorThreadCreated
13:22:06.303 DEBUG [Chromium] [72604:65852:0924/132206.303:WARNING:viz_main_impl.cc(85)] VizNullHypothesis is disabled (not a warning)
13:22:06.303 DEBUG [Chromium] [72604:65852:0924/132206.303:INFO:content_gpu_client.cc(47)] ContentGpuClient::PostCompositorThreadCreated
13:23:02.611 DEBUG [Chromium] [61172:53432:0924/132302.610:ERROR:sandbox_win.cc(783)] Sandbox cannot access executable. Check filesystem permissions are valid. See Chromium Docs - Sandbox Access is denied. (0x5)
13:23:02.611 DEBUG [Chromium] [61172:66528:0924/132302.611:ERROR:service_client.cc(36)] Unexpected on_device_model service disconnect:
13:23:05.431 DEBUG [Chromium] [50212:72460:0924/132305.431:ERROR:sandbox_win.cc(783)] Sandbox cannot access executable. Check filesystem permissions are valid. See Chromium Docs - Sandbox Access is denied. (0x5)
13:23:05.432 DEBUG [Chromium] [50212:66660:0924/132305.432:ERROR:service_client.cc(36)] Unexpected on_device_model service disconnect:

When I try to create a view, the only “errors” in the long list of logs that I can find are:

13:34:40.773 DEBUG [Chromium] [50212:66660:0924/133440.773:ERROR:registry.h(42)] Duplicate key: (20D0564FD69B118EDD9B256CDAE6D83F)
13:34:40.773 DEBUG [Chromium] [50212:66660:0924/133440.773:ERROR:registry.h(42)] Duplicate key: (20D0564FD69B118EDD9B256CDAE6D83F)

13:34:40.796 DEBUG > [704:182]: rpc.Frame.OnFinishFrameLoad [ stream_data [ stage_case: MESSAGE status: FAILED request: [ id: 2 data [ target { uuid: "df7ef9d5-136b-49d6-b4fa-fffda749d513" } request { event { browser_id { uuid: "74084506-6480-4a57-8aec-6831b9a46c57" } frame_id { uuid: "df7ef9d5-136b-49d6-b4fa-fffda749d513" } url: "about:blank" } } ]]
13:34:40.796 DEBUG < [696:117]: rpc.Navigation.Load [success { }]

When I open the external debugger, here is what pops up:

Interesting. You appear to be in some kind of half-loaded state - JxBrowser is launching, but the designer is not able to communicate with it?

Messages like that seem concerning, but it's odd that it's a 'DEBUG' level message.

At this point I'd recommend you get in contact with our support department officially so they can troubleshoot further.