Building Custom Ignition Gateway Docker Images

Hi all,

I’m working on a project where I'd like to build a custom Ignition Gateway Docker image that includes my data directory with my development changes. My goal is for the resulting image to be fully self-contained—so that when I run a container from it, the Gateway starts up with all our customizations and resources in place (tags, projects, etc.). I'm working on a local development environment and trying to get a reproducible image created in CI.

Here’s what I’m doing so far:

- I’m starting from the official Inductive Automation Ignition image (currently using inductiveautomation/ignition:8.3.0).

- I copy our data directory into the image using: `COPY --chown=2003:2003 data /usr/local/bin/ignition/data`

The Ignition process runs as user/group 2003, so I set ownership accordingly.

Problems/Questions:

When I build and run the image, the Gateway doesn’t pick up all the customizations as expected - though it does if I run from the base image with the customizations bound as a volume.

I want to ensure that all files and directories in /usr/local/bin/ignition/data are accessible to the Ignition process.

Are there best practices for copying the data directory and setting permissions/ownership in the Dockerfile?

Is there anything else I should be aware of to make sure the Gateway starts up cleanly with all our development changes included?

Thanks in advance!

Don't mount into /data/, that's too broad. If you need to load 'gateway config', then mount the things you care about from /data/config/resources/core/ (on your development system) into the container at the /data/config/resources/external/ directory. The external directory is automatically scanned in on gateway startup and treated as an immutable set of resources that the gateway will not ever attempt to make changes to.

Some more context:

The project inheritance situation is different, but you should generally follow the same pattern:
Mount /data/projects/ (or even individual projects within that folder) - don't try to mount the entire data/ directory, because Ignition needs to do certain things there related to the runtime that don't make sense to VCS/store outside of the container.

1 Like