This message is something you can safely ignore:

(376) 2 System appears to have failed over from node bbce08f01ef1

This message is printed because the hostname in your docker build environment is different from the hostname inside your container runtime, which causes the system to think this is a potential mirror-failover situation, and set a warning state.  You can suppress this message by killing the global ^SYS("NODE") during the docker build step.

I'm not sure what the problem is here, but one possibility is that Docker has changed storage drivers in the last year or two, and that the version of Cache you're using is only supported on the devicemapper storage driver.  You may wish to consider using a version of IRIS that supports overlay2, which is the default storage driver on almost all modern versions of Docker.


Docker's approach to the docker0 bridge does default to 172.17.x.x, but it can be configured.  See

Note that on Linux installations of Docker, while dockerd will look for /etc/docker/daemon.json and use what it finds there, the file is not created by default.  If you try to edit the file and don't find one, this is okay - just create it, like so:

  "bip": ""

A small suggestion: you may not wish to use "--log /usr/irissys/mgr/messages.log" in conjunction with ISC_DATA_DIRECTORY.  As soon as the system has finished coming up, all ongoing logging will be written to ISC_DATA_DIRECTORY/mgr/messages.log.  The docker-compose file you have here will result in the output of "docker logs iris2019.1" being relatively short, ending in "Executing iris qlist", and omitting everything after the first few seconds of startup.

For better logging to container stdout, you might wish to use something like "--log /shared/iris_conf.d/mgr/messages.log".

Hope this helps!

As a general rule, any RUN command in a Dockerfile that involves a running Caché instance (like calling $system.OBJ.Load()) should be called in the form of:

RUN ccontrol start INSTANCE \
 && / \
 && ccontrol stop INSTANCE quietly

Other commands can be mixed in, but best practice is to start Caché, use Caché, and stop Caché, in that order, all in a single RUN command.  More complex examples could look like this:

RUN / \
&& /usr/bin/rsyslogd \
&& ccontrol start INSTANCE \
&& / \
&& / \
&& ccontrol stop INSTANCE quietly \
&& /

Hope that helps.