Determine whether COBOL is running in a Docker container



Visual COBOL includes support for running inside Docker containers. Is there a way a program can determine whether it's running within a container?



The built-in routine CBL_GET_OS_INFO, can provide information about the COBOL product in use, and the environment in which it's running. As part of the support for working with containers, this routine has been enhanced to return a new bit flag to indicate whether the program is running in a Docker container.

When the routine is invoked, it returns a parameter block. One of the items returned is described as "Runtime System Capabilities", and a bit within that item indicates if a container is in use.

The attached program is a demonstration of this functionality. It creates a simple report that shows the Product Version, and whether the program is running on a full O/S or within a container.

The program uses the new BIT-OF function in Visual COBOL 6.0 to convert this information into an alphanumeric string for easy interrogation:


      *    The BIT-OF function is new in Visual COBOL 6.0...

           move function BIT-OF (cblte-osi-rts-capabilities)

               to expanded-bits


And then an 88 level COBOL condition is used to test the value:

          evaluate true
              when running-on-docker
                  move "Running in a Docker Container"
                    to docker-status
              when other
                  move "Running on full O/S"
                    to docker-status


 Here's a sample of the report produced by the example program:

 Current Product Version: 6
 Container Status: Running in a Docker Container

 The complete program is attached below.

Blair McDonald


Comment List
Related Discussions