Running Blocks in a Docker container
Blocks can run in a Docker container using the method described here, based on debian:12. This article explains how to build and run the Docker image. It is also assumed that you're familiar with Docker and that Docker is installed on the host system.
The Docker image currently only supports the AMD64/x86-64 architecture. It has been tested on Windows 10 and our Debian-based Linux server image.
Setting up a CodeMeter license server
A Docker container cannot directly access physical USB license key. To allow a Docker container to access a license available on the host computer (or any other computer running CodeMeter), the licens must be shared over the network using the "Server Access" feature of CodeMeter.
The process of enabling the "Server Access" feature differs between Windows and Linux:
- Stop the CodeMeter service by typing
service codemeter stopin a terminal window.
/etc/wibu/CodeMeter/Server.iniin a text editor.
sudois required for making changes to the file.
- Scroll down to the row beginning with
IsNetworkServer=. Change it from
1. Save the file and close the editor.
- Start the CodeMeter service again by typing
service codemeter startin a terminal window.
On Windows you may use either CodeMeter's Web Admin user interface, or the following command line method:
- Search for "CodeMeter command prompt" and launch it.
Building the Docker image from the Dockerfile
When building the image, make sure there are no USB license keys connected to the computer. Otherwise, the build process may fail.
- Download the files required either using git or by selecting the ZIP file option.
- If you opted for th ZIP file, extract the ZIP and open the resulting folder in a terminal.
docker build -t blocks .to build the image. This may take some time.
Running the image in a Docker container
To run the image in a Docker container, a few things have to be configured:
- Port 8080 must be mapped to a port on the host system and a mount path for /home/blocks must be specified. /home/blocks contains the Blocks installation as well as the PIXILAB-Blocks-root. A Blocks server configuration file can also be placed here.
- The USERID environment varaible must be set to match the UID of the owner of the /home/blocks volume on the host system. On Linux, type
echo $UIDin a terminal to see the current users UID. On Windows, use any UID. Please use a UID larger than or equal to 1000.
- The TZ environment variable should be set to the correct time zone. Here is a list of valid TZ values.
- The LICENSE_SERVER environment variable should be set to the address of the CodeMeter license server. (In some cases, this may not be required if the license server is running on the host computer, although this behaviour does not seem to be consistent across different platforms.)
localhost is not a valid LICENSE_SERVER address (at least when running the container in the default Bridge network mode)!
localhost refers to localhost of the container, not the host computer. Instead, use the IP address or a DNS name, if available.
The previously downloaded and extracted archive contains a docker-compose.yml file. Modify the container configuration in this file according to the descriptions above, then simply run
docker compose up to start a Blocks container. If everything is working, the Blocks editor should be accessible from http://the_host_address:the_host_port/edit.
Below is a sample docker-compose configuration:
services: blocks: image: blocks:latest init: true network_mode: bridge ports: - 8080:8080 volumes: - /home/myuser/blocks-home:/home/blocks environment: - USERID=1000 - LICENSE_SERVER=10.0.1.2 - TZ=Europe/Stockholm
Running a different Blocks version
The startup script will download the latest version of Blocks to /home/blocks when the container is started. To use another version of Blocks, simply replace the Blocks executables in /home/blocks from the host system. The startup script will NOT download the latest Blocks version if another version is already present in /home/blocks.