Interesting looks like such error expectable for RedHat. But don't have any RedHat subscription, and I managed to build an image with RedHat, but with centos repo. And in my case, it works without any errors. Maybe you can contact me directly and send your image, so I can check on it?

My differences from your Dockerfile

RUN /bin/echo -e '[centos]' \
    '\nname=CentOS $releasever - $basearch' \
    '\nbaseurl=http://ftp.heanet.ie/pub/centos/7/os/$basearch/' \
    '\nenabled=1' \
    '\ngpgcheck=0' > /etc/yum.repos.d/centos.repo \
 && cat /etc/yum.repos.d/centos.repo \
 && yum -y --nogpgcheck update \
 && yum -y --nogpgcheck install which tar hostname net-tools wget \
 && yum -y clean all \
 && ln -sf /etc/locatime /usr/share/zoneinfo/Australia/Brisbane

and I used the latest version of ccontainermain from releases, maybe with this version will be better for you as well.

curl -L https://github.com/daimor/ccontainermain/releases/download/0.7/ccontainermain -o /ccontainermain

batch file means, that you want to do it outside of Ensemble. In this case you should use ccontrol command or iris if you use IRIS.

ccontrol stop <ensemble> quietly

ccontrol start <ensemble>

where you should replace <ensemble> with your instance name.

if you work on windows, you can find ccontrol tool in bin directory of installed Ensemble.

you can find more details about using ccontrol in the documentation

The example in the documentation to %XML.Reader, does not work for you?

    #include %occStatus
    // Create a new XML Reader class
    Set reader = ##class(%XML.Reader).%New()
    // Begin processing of the XML input
    Set sc=reader.OpenFile(filename)
    If $$$ISERR(sc) Do $system.OBJ.DisplayError(sc) Quit  
    // Associate a class name with the XML element name
    Do reader.Correlate("Person","Sample.Person")
    // read Sample.Person objects from xml file
    Set Count=0
    While reader.Next(.person,.sc) {
        Write person.Name_" imported.",!
        Set Count=Count+1
        Set sc=person.%Save()
        If $$$ISERR(sc) Do $system.OBJ.DisplayError(sc) Quit  
    }
    If $$$ISERR(sc) Do $system.OBJ.DisplayError(sc) Quit  
    Write Count_" Sample.Person instances found."

ROLLBACK should revert any changes in data which was done in a transaction, with some exceptions like $increment on Global.

You can look at this example.

Class User.Test Extends %Persistent
{

Property Name As %String;

Property CalcName As %String [ Calculated, SqlComputeCode = { set {*} = {Name} }, SqlComputed, SqlComputeOnChange = Name ];

Index ByName On CalcName;

Storage Default
{
<Data name="TestDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Name</Value>
</Value>
</Data>
<DataLocation>^User.TestD</DataLocation>
<DefaultData>TestDefaultData</DefaultData>
<IdLocation>^User.TestD</IdLocation>
<IndexLocation>^User.TestI</IndexLocation>
<StreamLocation>^User.TestS</StreamLocation>
<Type>%Storage.Persistent</Type>
}

}

Let's create first object

USER>s o=##class(Test).%New()

USER>set o.Name="testname"

USER>w o.%Save()
1

check saved in globals

USER>zw ^User.TestD,^User.TestI
^User.TestD=1
^User.TestD(1)=$lb("","testname")
^User.TestI("ByName"," TESTNAME",1)=""

and now open transaction, and do some changes.

USER>k

USER>TSTART

TL1:USER>set o=##class(Test).%OpenId(1)

TL1:USER>s o.Name="testname2"

TL1:USER>w o.%Save()
1
TL1:USER>zw ^User.TestD,^User.TestI
^User.TestD=1
^User.TestD(1)=$lb("","testname2")
^User.TestI("ByName"," TESTNAME2",1)=""

So, changes there, let's do rollback, and check data again.

TL1:USER>TROLLBACK

USER>zw ^User.TestD,^User.TestI
^User.TestD=1
^User.TestD(1)=$lb("","testname")
^User.TestI("ByName"," TESTNAME",1)=""