Skip to content
🐳 EJT License Server image based on Alpine Linux
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Switch to GitHub Actions Oct 10, 2019
.res Update README Oct 10, 2019
examples/compose Fix example Oct 10, 2019
.dockerignore Switch to GitHub Actions Oct 10, 2019
.editorconfig TravisCI notif Apr 28, 2019
.gitattributes Linguist Mar 19, 2019
.gitignore Update ignore Feb 16, 2018 Update CHANGELOG Oct 10, 2019
Dockerfile Clean apt and set workdir Oct 10, 2019
LICENSE New year Jan 6, 2019 Update README Oct 10, 2019 Use adoptopenjdk:12-jre-hotspot base image Oct 10, 2019

Latest Version Build Status Docker Stars Docker Pulls Code Quality
Support me on Patreon Donate Paypal


🐳 EJT License Server Docker image based on AdoptOpenJDK.
If you are interested, check out my other 🐳 Docker images!

πŸ’‘ Want to be notified of new releases? Check out πŸ”” Diun (Docker Image Update Notifier) project!


  • License server customizable via environment variables
  • Persistence of configuration in a single directory
  • A custom base url can be provided to download the ejtserver tarball


Multi-platform image

Following platforms for this image are available:

$ docker run --rm mplatform/mquery crazymax/ejtserver:latest
Image: crazymax/ejtserver:latest
 * Manifest List: Yes
 * Supported platforms:
   - linux/amd64
   - linux/arm64
   - linux/ppc64le
   - linux/s390x

Environment variables

  • TZ : The timezone assigned to the container (default UTC)
  • EJT_ACCOUNT_USERNAME : Username of your EJT account to download the license server. Can be empty if you use a custom base url to download the ejtserver tarball without HTTP authentication
  • EJT_ACCOUNT_PASSWORD : Password linked to the username
  • EJTSERVER_VERSION : EJT License Server version to install. See the official changelog for a curated list. (default 1.13.1)
  • EJTSERVER_DOWNLOAD_BASEURL : Base url where EJT License Server unix tarball can be downloaded (default
  • EJTSERVER_LICENSES : Your floating licenses (comma delimited)
  • EJTSERVER_DISPLAY_HOSTNAMES : If you want to see host names instead of IP addresses (default false)
  • EJTSERVER_LOG_LEVEL : Log4J log level of the EJT License Server (default INFO)


  • /data : Contains configuration and the downloaded EJT License Server unix tarball

In this folder you will find those files :

  • ejtserver_unix_*.tar.gz : The downloaded EJT License Server unix tarball
  • ip.txt : If you would like to allow only certain IP addresses, enter one IP address per line. If no IP addresses are entered, all IP addresses will be allowed. You can specify IP masks, such as 192.168.2.*
  • users.txt : If you would like to allow only certain user names, please enter one user name per line. If no user names are entered, all user names will be allowed

⚠️ Note that the volume should be owned by uid 1000 and gid 1000. If you don't give the volume correct permissions, the container may not start.


  • 11862 : License server port


You also have access to these commands from the container :

  • ejtserver : This is the license server the daemon launch script. Commands available : start|stop|run|run-redirect|status|restart|force-reload.
  • admin : Admin tool command line based of ejtserver. It allows you to list all active connections and to terminate selected connections. In addition, you can check out a temporary license for use in environments that have no access to the floating license server

Usage :

docker-compose exec ejtserver admin list


Docker compose is the recommended way to run this image. You can use the following docker compose template, then run the container :

docker-compose up -d
docker-compose logs -f

Or use the following minimal command :

docker run -d -p 11862:11862 --name ejtserver \
  -e TZ="Europe/Paris" \
  -e EJT_ACCOUNT_USERNAME="my_ejt_username" \
  -e EJT_ACCOUNT_PASSWORD="my_ejt_password" \
  -e EJTSERVER_LICENSES="0-0123-0123456789" \
  -v $(pwd)/data:/data \


Recreate the container whenever i push an update :

docker-compose pull
docker-compose up -d


How to use your floating license ?

ej-technologies' products offer a floating license mode in the license dialog. Choose Help -> Enter License Key from the main menu in the JProfiler GUI or the install4j IDE and select the Floating license radio button.

The "Name" and "Company" fields are informational only, unless you choose to restrict the allowed values for the "Name" field as described in README.TXT. In the license server field you have to enter the hostname of the computer where the license server is running. Instead of a host name, an IP address can also be used.

If have a floating license for a certain major version of a product, you can use older versions of the same product with that floating license as well.

Should you require any additional assistance, please contact

User groups

If you want to partition keys to different groups of users, you can define groups in the file license.txt and the access control files users.txt and ip.txt by inserting group headers :


All entries after a group header belong to that group until a new group is started. If no group has been started, entries are added to the "default" group.

Users are assigned to a group based on the defined groups in the access control files. If users are defined in users.txt, the group is determined by the that file. If the resulting group is the default group, the ip.txt file will be used for determining the associated group. If the users.txt file is empty, only the ip.txt file will be used.

In order to partition a single key to different groups in the license.txt file, add the key to multiple groups with the following syntax :


where n is the number of concurrent users that should be assigned to the current group. Use different values of n in different groups that add up to the maximum number of current users for the key. For example :


splits the 10-user key F-95-10-xxx into 4 concurrent users for [groupA] and 6 concurrent users for [groupB]. In users.txt, the groups would be defined as :



Alternatively, the ip.txt file could define groups as :


Group names are shown in the log file next to the user name.

How can I help ?

All kinds of contributions are welcome πŸ™Œ!
The most basic way to show your support is to star 🌟 the project, or to raise issues πŸ’¬
But we're not gonna lie to each other, I'd rather you buy me a beer or two 🍻!

Support me on Patreon Paypal Donate


MIT. See LICENSE for more details.
And a special thanks to @ingokegel and ej-technologies'!

You can’t perform that action at this time.