Git Product home page Git Product logo

docker-omada-controller's Introduction

mbentley/omada-controller

Docker image for TP-Link Omada Controller to control TP-Link Omada Hardware

Table of Contents

Image Tags

⚠️ Warning ⚠️ Do NOT run the armv7l (32 bit) images. Upgrade your operating system to arm64 (64 bit) unless you accept that you're running an outdated MongoDB and a base operating system with unpatched vulnerabilities! See the Known Issues readme for more information.

Multi-arch Tags

The following tags have multi-arch support for amd64, armv7l, and arm64 and will automatically pull the correct tag based on your system's architecture:

Tag(s) Major.Minor Release Current Version
latest, 5.13 Omada Controller 5.13.x 5.13.30.8
beta Omada Controller beta 5.14.20.9
5.12 Omada Controller 5.12.x 5.12.7
5.9 Omada Controller 5.9.x 5.9.31
4.4 Omada Controller 4.4.x 4.4.8
4.1 Omada Controller 4.1.x 4.1.5
3.2 Omada Controller 3.2.x 3.2.17

Tags with Chromium

Note: These are currently published for the amd64 architecture only. These tags extend the tags above to add Chromium which is required to generate reports from the controller.

Tag(s) Major.Minor Release
latest-chromium, 5.13-chromium Omada Controller 5.13.x
beta-chromium, Omada Controller beta
5.12-chromium Omada Controller 5.12.x
5.9-chromium Omada Controller 5.9.x

Explicit Architecture Tags

See list of architecture specific tags.

Archived Tags

These images are still published on Docker Hub but are no longer regularly updated due to the controller software no longer being updated. Use with extreme caution as these images are likely to contain unpatched security vulnerabilities!

Tag(s) Major.Minor Release Current Version
5.8 Omada Controller 5.8.x 5.8.4
5.8-chromium Omada Controller 5.8.x 5.8.4
5.7 Omada Controller 5.7.x 5.7.4
5.7-chromium Omada Controller 5.7.x 5.7.4
5.6 Omada Controller 5.6.x 5.6.3
5.6-chromium Omada Controller 5.6.x 5.6.3
5.5 Omada Controller 5.5.x 5.5.6
5.5-chromium Omada Controller 5.5.x 5.5.6
5.4 Omada Controller 5.4.x 5.4.6
5.4-chromium Omada Controller 5.4.x 5.4.6
5.3 Omada Controller 5.3.x 5.3.1
5.3-chromium Omada Controller 5.3.x 5.3.1
5.1 Omada Controller 5.1.x 5.1.7
5.1-chromium Omada Controller 5.1.x 5.1.7
5.0 Omada Controller 5.0.x 5.0.30
4.3 Omada Controller 4.3.x 4.3.5
4.2 Omada Controller 4.2.x 4.2.11
3.1 Omada Controller 3.1.x 3.1.13
3.0 Omada Controller 3.0.x 3.0.5

Getting Help & Reporting Issues

If you have issues running the controller, feel free to create a Help discussion and I will help as I can. If you are specifically having a problem that is related to the actual software, I would suggest filing an issue on the TP-Link community forums as I do not have access to source code to debug those issues. If you're not sure where the problem might be, I can help determine if it is a running in Docker issue or a software issue. If you're certain you have found a bug, create a Bug Report Issue.

Controller Upgrades

Controller upgrades are done by stopping the existing container gracefully (see the note below on this topic), removing the existing container, and running a new container with the new version of the controller. This can be done manually, with compose, or with manby other 3rd party tools which auto-update containers.

Preventing database corruption

When stopping your container in order to upgrade the controller, make sure to allow the MongoDB enough time to safely shutdown. This is done using docker stop -t <value> where <value> is a number in seconds, such as 60, which should allow the controller to cleanly shutdown. Database corruption has been observed when not cleanly shut down. The compose example now includes a default stop_grace_period of 60s.

Upgrade Path

As always, take backups and read the documentation but the quick explanation of the upgrade path is:

Upgrading to 5.0.x from 4.1.x or above

There are no manual upgrade steps directly related to the software itself required when upgrading to 5.0.x if you are already running at least 4.1.x. For full details, please refer to the TP-Link upgrade documentation.

As always, I would recommend taking a backup through the controller software as well as save a copy of the persistent data while the controller is not running when you do upgrade to simplify the rollback process, if required.

Changes/Notes for 5.0.x

  • Updated Ports - If you are only exposing ports using port mapping as the list of ports required has been updated. Starting with 5.0.x, the controller is also listening on TCP port 29814 so you should add -p 29814:29814 to your run command, compose file, or however you're running the container. Some additional unnecessary ports are no longer required so the list is shorter now.
  • Volume Updates - Starting with 5.0.x, the controller software is now built using Spring Boot. This version no longer uses the work volume as the application is no longer extracted to a temporary directory. If you do nothing, there will be no impact except for an extra directory sitting around.
  • Custom Ports - If using custom ports from the defaults of 8088, 8043, and 8843, they will not persist across container re-creation starting in 5.0 unless you always set the MANAGE_*_PORT enviornment variables. This is due to adding /opt/tplink/EAPController/properties to the classpath starting in 5.0. If you change the ports through the UI, you should still continue to also set the ports using the environment variables, matching the ports you have set in the UI. For more detail, see Using non-default ports.

Upgrading to 4.1 from 3.2.10 or below

The upgrade to the 4.1.x version is not a seamless upgrade and can't be done in place. You must be running at least 3.1.4 or greater before you can proceed. Instructions are available from TP-Link but many of the steps will be different due to running in a docker container. Here are the high level steps:

  1. Review the steps in the TP-Link instructions as some settings will not transfer to the new version.
  2. Take a backup of your controller as described in the upgrade procedure
  3. Stop your controller
  4. Clear your existing persistent data directories for data, work, and logs. I would recommend backing up the files so you can revert to the previous version in case of issues.
  5. Start your controller with the new Docker image and proceed with at least the basic setup options
  6. Import your backup file to the 4.1 version of the controller

Notes for 4.1

  1. Ports - Do not change the ports for the controller or portal in the UI to ports below 1024 unless you have adjusted the unprivileged ports; for ports < 1024, see Unprivileged Ports.
  2. SSL Certificates - if you are installing your own SSL certificates, you should only manage them using one method - through the UI or by using the /cert volume as described below.
  3. Synology Users - if you're using a Synology and are using the latest tag and update to 4.1, you will need to make sure to re-create the container due to the CMD changing from older versions to 4.1 as Synology retains the entrypoint and command from the container as it is defined and not from the image.

Building images

Click to expand docker build instructions

As of the Omada Controller version 4.x, the Dockerfiles have been simplified so that there is a unified Dockerfile. There are some differences between the build steps for amd64, arm64, and armv7l. These changes will happen automatically if you use the build-args INSTALL_VER and ARCH. For possible INSTALL_VER values, see mbentley/docker-omada-controller-url:

amd64

No build args required; set for the default build-args

docker build \
  --build-arg INSTALL_VER="5.13.30.8" \
  --build-arg ARCH="amd64" \
  -f Dockerfile.v5.x \
  -t mbentley/omada-controller:5.13 .

arm64

Only the ARCH build-arg is required

docker build \
  --build-arg INSTALL_VER="5.13.30.8" \
  --build-arg ARCH="arm64" \
  -f Dockerfile.v5.x \
  -t mbentley/omada-controller:5.13-arm64 .

armv7l

Both the ARCH and BASE build-args are required

docker build \
  --build-arg INSTALL_VER="5.13.30.8" \
  --build-arg ARCH="armv7l" \
  --build-arg BASE="ubuntu:16.04" \
  -f Dockerfile.v5.x \
  -t mbentley/omada-controller:5.13-armv7l .

Example Usage

To run this Docker image and keep persistent data in named volumes:

Using non-default ports

tl;dr: Always make sure the environment variables for the ports match any changes you have made in the web UI and you'll be fine.

Note: The 3.2 version of the controller only supports the MANAGE_HTTP_PORT and MANAGE_HTTPS_PORT variables for modifying the controller's admin web interface ports. This means that setting PORTAL_HTTP_PORT and PORTAL_HTTPS_PORT will not have any effect in 3.2. Versions 4.x or greater support all of the MANAGE_*_PORT and PORTAL_*_PORT variables as described in the Optional Variables section.

If you want to change the ports of your Omada Controller to something besides the defaults, there is some unexpected behavior that the controller exhibits. There are two sets of ports: one for HTTP/HTTPS for the controller itself and another for HTTP/HTTPS for the captive portal, typically used for authentication to a guest network. The controller's set of ports, which are set by the MANAGE_*_PORT environment variables, can only be modified using the environment variables on the first time the controller is started. If persistent data exists, changing the controller's ports via environment variables will have no effect on the controller itself and can only be modified through the web UI. On the other hand, the portal ports will always be set to whatever has been set in the environment variables, which are set by the PORTAL_*_PORT environment variables.

Using port mapping

Warning: If you want to change the controller ports from the default mappings, you absolutely must update the port binding inside the container via the environment variables. The ports exposed must match what is inside the container. The Omada Controller software expects that the ports are the same inside the container and outside and will load a blank page if that is not done. See #99 for details and and example of the behavior.

docker run -d \
  --name omada-controller \
  --stop-timeout 60 \
  --restart unless-stopped \
  --ulimit nofile=4096:8192 \
  -p 8088:8088 \
  -p 8043:8043 \
  -p 8843:8843 \
  -p 27001:27001/udp \
  -p 29810:29810/udp \
  -p 29811-29816:29811-29816 \
  -e MANAGE_HTTP_PORT=8088 \
  -e MANAGE_HTTPS_PORT=8043 \
  -e PGID="508" \
  -e PORTAL_HTTP_PORT=8088 \
  -e PORTAL_HTTPS_PORT=8843 \
  -e PORT_ADOPT_V1=29812 \
  -e PORT_APP_DISCOVERY=27001 \
  -e PORT_DISCOVERY=29810 \
  -e PORT_MANAGER_V1=29811 \
  -e PORT_MANAGER_V2=29814 \
  -e PORT_TRANSFER_V2=29815 \
  -e PORT_RTTY=29816 \
  -e PORT_UPGRADE_V1=29813 \
  -e PUID="508" \
  -e SHOW_SERVER_LOGS=true \
  -e SHOW_MONGODB_LOGS=false \
  -e SSL_CERT_NAME="tls.crt" \
  -e SSL_KEY_NAME="tls.key" \
  -e TZ=Etc/UTC \
  -v omada-data:/opt/tplink/EAPController/data \
  -v omada-logs:/opt/tplink/EAPController/logs \
  mbentley/omada-controller:5.13
Example usage for 3.2

The below example can be used with 3.2. The port and volume mappings have changed in newer versions.

docker run -d \
  --name omada-controller \
  --stop-timeout 60 \
  --restart unless-stopped \
  --ulimit nofile=4096:8192 \
  -p 8088:8088 \
  -p 8043:8043 \
  -p 8843:8843 \
  -p 29810:29810/udp \
  -p 29811:29811 \
  -p 29812:29812 \
  -p 29813:29813 \
  -p 29814:29814 \
  -e MANAGE_HTTP_PORT=8088 \
  -e MANAGE_HTTPS_PORT=8043 \
  -e SMALL_FILES=false \
  -e SSL_CERT_NAME="tls.crt" \
  -e SSL_KEY_NAME="tls.key" \
  -e TZ=Etc/UTC \
  -v omada-data:/opt/tplink/EAPController/data \
  -v omada-work:/opt/tplink/EAPController/work \
  -v omada-logs:/opt/tplink/EAPController/logs \
  mbentley/omada-controller:3.2

Using net=host

In order to use the host's network namespace, you must first ensure that there are not any port conflicts. The docker run command is the same except for that all of the published ports should be removed and --net host should be added. Technically it will still work if you have the ports included, but Docker will just silently drop them. Here is a snippet of what the above should be modified to look like:

...
  --restart unless-stopped \
  --net host \
  -e MANAGE_HTTP_PORT=8088 \
...

Optional Variables

Variable Default Values Description Valid For
MANAGE_HTTP_PORT 8088 1024-65535 Management portal HTTP port; for ports < 1024, see Unprivileged Ports >= 3.2
MANAGE_HTTPS_PORT 8043 1024-65535 Management portal HTTPS port; for ports < 1024, see Unprivileged Ports >= 3.2
PGID 508 any Set the omada process group ID ` >= 3.2
PGROUP omada any Set the group name for the process group ID to run as >= 5.0
PORTAL_HTTP_PORT 8088 1024-65535 User portal HTTP port; for ports < 1024, see Unprivileged Ports >= 4.1
PORTAL_HTTPS_PORT 8843 1024-65535 User portal HTTPS port; for ports < 1024, see Unprivileged Ports >= 4.1
PORT_ADOPT_V1 29812 1024-65535 Omada Controller and Omada Discovery Utility manage the Omada devices running firmware fully adapted to Omada Controller v4* >= 5.x
PORT_APP_DISCOVERY 27001 1024-65535 Omada Controller can be discovered by the Omada APP within the same network through this port >= 5.x
PORT_DISCOVERY 29810 1024-65535 Omada Controller and Omada Discovery Utility discover Omada devices >= 5.x
PORT_MANAGER_V1 29811 1024-65535 Omada Controller and Omada Discovery Utility manage the Omada devices running firmware fully adapted to Omada Controller v4* >= 5.x
PORT_MANAGER_V2 29814 1024-65535 Omada Controller and Omada Discovery Utility manage the Omada devices running firmware fully adapted to Omada Controller v5* >= 5.x
PORT_TRANSFER_V2 29815 1024-65535 Omada Controller receives Device Info and Packet Capture files from the Omada devices >= 5.9
PORT_RTTY 29816 1024-65535 Omada Controller establishes the remote control terminal session with the Omada devices >= 5.9
PORT_UPGRADE_V1 29813 1024-65535 When upgrading the firmware for the Omada devices running firmware fully adapted to Omada Controller v4*. >= 5.x
PUID 508 any Set the omada process user ID ` >= 3.2
PUSERNAME omada any Set the username for the process user ID to run as >= 5.0
SHOW_SERVER_LOGS true [true|false] Outputs Omada Controller logs to STDOUT at runtime >= 4.1
SHOW_MONGODB_LOGS false [true|false] Outputs MongoDB logs to STDOUT at runtime >= 4.1
SKIP_USERLAND_KERNEL_CHECK false [true|false] When set to true, skips the userland/kernel match check for armv7l & arm64
SMALL_FILES false [true|false] See Small Files for more detail; no effect in >= 4.1.x 3.2 only
SSL_CERT_NAME tls.crt any Name of the public cert chain mounted to /cert; see Custom Certificates >= 3.2
SSL_KEY_NAME tls.key any Name of the private cert mounted to /cert; see Custom Certificates >= 3.2
TLS_1_11_ENABLED false [true|false] Re-enables TLS 1.0 & 1.1 if set to true >= 4.1
TZ Etc/UTC <many> See Time Zones for more detail >= 3.2

Documentation on the ports used by the controller can be found in the TP-Link FAQ.

Persistent Data and Permissions

Note: The permissions portion only applies to tags for 3.1.x and 3.0.x as the 3.2.x and newer versions manage the permissions for you.

If you utilize bind mounts instead of Docker named volumes (e.g. - -v /path/to/data:/opt/tplink/EAPController/data) in your run command, you will want to make sure that you have set the permissions appropriately on the filesystem otherwise you will run into permissions errors and the container will not run because it won't have the permissions to write data since this container uses a non-root user. To resolve that, you need to chown the directory to 508:508 on the host as that is the UID and GID that we use inside the container. For example:

chown -R 508:508 /data/omada/data /data/omada/logs

In the examples, there are two directories where persistent data is stored: data and logs. The data directory is where the persistent database data is stored where all of your settings, app configuration, etc is stored. The log directory is where logs are written and stored. I would suggest that you use a bind mounted volume for the data directory to ensure that your persistent data is directly under your control and of course take regular backups within the Omada Controller application itself.

Custom Certificates

By default, Omada software uses self-signed certificates. If however you want to use custom certificates you can mount them into the container as /cert/tls.key and /cert/tls.crt. The tls.crt file needs to include the full chain of certificates, i.e. cert, intermediate cert(s) and CA cert. This is compatible with kubernetes TLS secrets. Entrypoint script will convert them into Java Keystore used by jetty inside the Omada SW. If you need to use different file names, you can customize them by passing values for SSL_CERT_NAME and SSL_KEY_NAME as seen above in the Optional Variables section.

Warning - As of the version 4.1, certificates can also be installed through the web UI. You should not attempt to mix certificate management methods as installing certificates via the UI will store the certificates in MongoDB and then the /cert volume method will cease to function.

MongoDB Small Files

In Omada 3.2 and older, this image uses the default mongodb settings for journal files. If disk space is an issue, you can set the SMALL_FILES variable to true which will add --smallfiles to the startup arguments for MongoDB.

Warning - As of the version 4.1 and newer, MongoDB utilizes the WiredTiger storage engine by default which does not have the same journal file size issue as the MMAPv1 storage engine. If SMALL_FILES is set to true, a warning will be issued at startup but startup will still proceed.

Time Zones

By default, this image uses the Etc/UTC time zone. You may update the time zone used by passing a different value in the TZ variable. See List of tz database time zones for a complete list of values in the TZ database name table column.

Unprivileged Ports

This Docker image runs as a non-root user by default. In order to bind unprivileged ports (ports < 1024 by default), you must include --sysctl net.ipv4.ip_unprivileged_port_start=0 in your docker run command to allow ports below 1024 to be bound by non-root users.

Using Docker Compose

There is a Docker Compose file available for those who would like to use compose to manage the lifecycle of their container:

wget https://raw.githubusercontent.com/mbentley/docker-omada-controller/master/docker-compose.yml
docker compose up -d

Omada Controller API Documentation

If you are interested in using the Omada Controller APIs to retrieve data from the controller, the latest version of the API documentation that I have found is available from the community forums in this post. I'm not able to provide support for the APIs but I've found them to be helpful for my own usage and they weren't easy to find.

Known Issues

See the Known Issues documentation for details.

docker-omada-controller's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docker-omada-controller's Issues

Discovery requires network_mode: host

Hi,

I've just pulled de2206826ae4 and created an application with the following docker-compose settings:

version: '3'
networks:
  omada_net:
services:
  omada:
    container_name: omada
    image: mbentley/omada-controller:latest
    networks:
      - omada_net
    ports:
      - '8088:8088'
      - '8043:8043'
      - '27001:27001/udp'
      - '27002:27002'
      - '27217:27217'
      - '29810:29810/udp'
      - '29811:29811'
      - '29812:29812'
      - '29813:29813'
    volumes:
      - /share/Container/Omada/data:/opt/tplink/EAPController/data
      - /share/Container/Omada/work:/opt/tplink/EAPController/work
      - /share/Container/Omada/logs:/opt/tplink/EAPController/logs
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped

This can run, connect to the web, register with the TP-Link cloud service, etc. but does not detect my EAP devices. Checking the logs, it appears that MongoDB is not starting.

If instead I use the following docker-compose file:

version: '3'
services:
  omada:
    network_mode: host
    container_name: omada
    image: mbentley/omada-controller:latest
    volumes:
      - /share/Container/Omada/data:/opt/tplink/EAPController/data
      - /share/Container/Omada/work:/opt/tplink/EAPController/work
      - /share/Container/Omada/logs:/opt/tplink/EAPController/logs
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped

everything works as expected, MongoDB starts and Omada detects my EAP devices fine.

Omada container default user and PW

Thanks much for creating this container. I can access the login page but the documented TP-Link default user name and password (admin, admin) do not work. Are their different credentials in your image? I am using mbentley/omada-controller:3.2.1
Image 246

capitive portal picture upload

I may be in over my head...

I am running the docker container omada version 4.2 in proxmox and on Site Settings>Authetication>Portal I keep getting an error when trying to upload a custom background picture for captive portal. When I try to apply a 770 kB jpg or 200 kB jpeg, I get an error message "Failed to upload. Select a picture no more than 1MB."

What makes things more interesting to me, is that the info next to the background picture choose icon says "choose a picture no more than 2MB"

This is my first docker container on proxmox and I would consider myself a novice at both.

I am not sure where I went wrong as there seems to be nothing in the logs.

Unable to connect to Omada

I'm stuck. I have tried several times to deploy this docker but I can't connect to it using the host 192.168.1.1 or localhost ON the host.

This is running on Windows 10 using Docker Desktop. Firewall is turned off on the host machine.

My Command:
docker run -d --name Omada-Controller --restart unless-stopped --net host -e MANAGE_HTTP_PORT=8088 -e MANAGE_HTTPS_PORT=8043 -e PORTAL_HTTP_PORT=8088 -e PORTAL_HTTPS_PORT=8843 -e SHOW_SERVER_LOGS=true -e SHOW_MONGODB_LOGS=false -e TZ=America/Indianapolis -v $HOME/docker/omada/data:/opt/tplink/EAPController/data -v $HOME/docker/omada/work:/opt/tplink/EAPController/work -v $HOME/docker/omada/logs:/opt/tplink/EAPController/logs mbentley/omada-controller:latest
Screenshot 2021-02-16 185910
Screenshot 2021-02-16 190003
Screenshot 2021-02-16 190024

Constantly Restarting

After installing via:

docker run -d \
  --name omada-controller \
  --restart unless-stopped \
  -e TZ=America/New_York \
  -e SMALL_FILES=true \
  -p 8088:8088 \
  -p 8043:8043 \
  -p 27001:27001/udp \
  -p 27002:27002 \
  -p 29810:29810/udp \
  -p 29811:29811 \
  -p 29812:29812 \
  -p 29813:29813 \
  -v omada-data:/opt/tplink/EAPController/data \
  -v omada-work:/opt/tplink/EAPController/work \
  -v omada-logs:/opt/tplink/EAPController/logs \
  mbentley/omada-controller:3.2-arm64

I then run docker container ls -a

and constantly get an output of Restarting (1) X seconds ago

It never seems to start. What is going on and where do I look for more information?

Ports for autodiscovery

Hello,

Using the following ports for my docker container I can automatically enroll devices using option 138 in DHCP using a Docker Swarm Overlay network, so no macvlan or host networking needed.

Tested by resetting my EAP245s and watching them re-enroll. My controller is in a separate VLAN so I can't test detection directly, but if it works with option 138 there's a good chance it will in the same subnet without.

ports:
  - "29810:29810"
  - "29811:29811"
  - "29812:29812"
  - "29813:29813"
  - "29810:29810/udp"
  - "29811:29811/udp"
  - "29812:29812/udp"
  - "29813:29813/udp"
  - "8088:8088"
  - "8043:8043"
  - "8843:8843"

Not so much a an issue as a non-issue, but I hope that helps.

Captive Portal?

How do i get the captive portal to work?

It is running on port 8089. Do i have to open the ports somehow?

Sorry for asking, but i am not so much into docker.

multiple Dockerfiles for a given version

The Dockerfile for amd64 and armv7l differ slightly, that's why there are two different Dockerfiles (Dockerfile.v4.2.x and Dockerfile.v4.2.x-armv7l).

It is possible to have one unique Dockerfile, putting the differences out of it.

If you think that it is acceptable to rely on make and use:

make
make armv7l
make arm64

instead of:

docker build ...
docker build -f Dockerfile.v4.2.x-armv7 ...
docker build -f Dockerfile.v4.2.x-arm64 ...

then I think I can provide a PR

Cannot access the login page on a Synology NAS

I've tried to find the answer all over the Internet, but unfortunately I cannot find a solution for my problem: I get a ERR_CONNECTION_REFUSED when I try to open the Omada Controller on my Synology NAS. I use the NAS IP on my local LAN and port 8043 for https (8088 on http also doesn't work). Am I doing something wrong here?

I have a Synology DS718+ and I installed Docker + your Omada controller (latest version). The installation went smoothly and I don't see any errors in the logs. It's just that my browser connection is being refused. I assume I do not need to use the 172.17.0.0 network to access the Controller?

btw: I disabled the Firewall on the NAS to be sure.

Can you help me?

Below the exported config:
{
"cap_add" : null,
"cap_drop" : null,
"cmd" : "/opt/tplink/EAPController/jre/bin/java -server -Xms128m -Xmx1024m -XX:MaxHeapFreeRatio\=60 -XX:MinHeapFreeRatio\=30 -XX:+HeapDumpOnOutOfMemoryError -XX:-UsePerfData -Deap.home\=/opt/tplink/EAPController -cp /opt/tplink/EAPController/lib/*: com.tp_link.eap.start.EapLinuxMain",
"cpu_priority" : 50,
"devices" : null,
"enable_publish_all_ports" : false,
"enable_restart_policy" : true,
"enabled" : true,
"env_variables" : [
{
"key" : "PATH",
"value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
}
],
"exporting" : false,
"id" : "a23e6f0a44868105d498a643fadd5d028b823da0b1ae1e453034cc7d213fe499",
"image" : "mbentley/omada-controller:latest",
"is_ddsm" : false,
"is_package" : false,
"links" : [],
"memory_limit" : 0,
"name" : "mbentley-omada-controller",
"network" : [
{
"driver" : "bridge",
"name" : "bridge"
}
],
"network_mode" : "bridge",
"port_bindings" : [
{
"container_port" : 27001,
"host_port" : 0,
"type" : "udp"
},
{
"container_port" : 27002,
"host_port" : 0,
"type" : "tcp"
},
{
"container_port" : 29810,
"host_port" : 0,
"type" : "udp"
},
{
"container_port" : 29811,
"host_port" : 0,
"type" : "tcp"
},
{
"container_port" : 29812,
"host_port" : 0,
"type" : "tcp"
},
{
"container_port" : 29813,
"host_port" : 0,
"type" : "tcp"
},
{
"container_port" : 8043,
"host_port" : 0,
"type" : "tcp"
},
{
"container_port" : 8088,
"host_port" : 0,
"type" : "tcp"
}
],
"privileged" : false,
"shortcut" : {
"enable_shortcut" : true,
"enable_status_page" : true,
"enable_web_page" : false
},
"use_host_network" : false,
"volume_bindings" : []
}

Issues with 4.2

Can't get 4.2 to work.

First errors were about log4j including this one:
2021-02-13 04:56:49,562 log4j-thread ERROR Unable to create file ../logs/server.log java.io.IOException: Could not create directory /opt/tplink/logs
This is fixed by adding a second volume mapping:
-v omada-logs:/opt/tplink/EAPController/logs \
-v omada-logs:/opt/tplink/logs \

Next attempt mongodb would not start:
2021-02-13 05:05:35 [main] [WARN]-[SourceFile:78] - com.tplink.omada.start.a.a: Fail to start mongo DB server com.tplink.omada.start.a.a: Fail to start mongo DB server
This is fixed by adding a second volume mapping:
-v omada-logs:/opt/tplink/EAPController/data\
-v omada-logs:/opt/tplink/data\

Next start attempt jetty would not start:
2021-02-13 05:21:34 [main] [WARN]-[SourceFile:22] - OmadaJettyServer start failed!_can't create work directory com.tplink.omada.start.a.a: can't create work directory
This is fixed by adding a second volume mapping:
-v omada-logs:/opt/tplink/EAPController/work\
-v omada-logs:/opt/tplink/work\

Leads to the the final error which I cannot resolve:
2021-02-13 05:24:41 [main] [WARN]-[WebInfConfiguration.java:675] - Web application not found ../webapps/omada-web.war
In the container I can see the war:
root@677f6b155c6a:/opt/tplink/EAPController# ls -l /opt/tplink/EAPController/webapps
total 6048
-rw-r--r-- 1 root root 6189282 Feb 13 02:16 omada-web.war

I am wondering if a directory variable (OMADA_HOME?) is set incorrectly but this is the extent that I can troubleshoot.

Error starting up on Docker on OpenMediaVault

Pulled and installed the image
Added PUID and GUID to match owner of the 3 file systems

I get this at startup:
SLF4J: com.tp_link.eap.util.m.a SLF4J: The following set of substitute loggers may have been accessed SLF4J: during the initialization phase. Logging calls during this SLF4J: phase were not honored. However, subsequent logging calls to these SLF4J: loggers will work as normally expected. SLF4J: See also http://www.slf4j.org/codes.html#substituteLogger Exception in thread "Thread-0" java.lang.IllegalArgumentException: URI is not hierarchical at java.io.File.<init>(File.java:418) at com.tp_link.eap.util.g.a.a(SourceFile:47) at com.tp_link.eap.configuration.b.a(SourceFile:58) at com.tp_link.eap.util.o.c(SourceFile:443) at com.tp_link.eap.util.o.b(SourceFile:434) at com.tp_link.eap.start.f.run(SourceFile:35)

and then IO failing
`
2019-11-24 22:05:42,374 main ERROR Unable to create file /opt/tplink/EAPController/logs/server.log java.io.IOException: Permission denied
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:1012)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:574)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:554)
at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:112)
at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:155)
at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:131)
at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:60)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:122)
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
at com.tp_link.eap.start.b.a.a.(SourceFile:15)
at com.tp_link.eap.start.EapLinuxMain.b(SourceFile:59)
at com.tp_link.eap.start.EapLinuxMain.main(SourceFile:19)

2019-11-24 22:05:42,425 main ERROR Unable to inject fields into builder class for plugin type class org.apache.logging.log4j.core.appender.RollingFileAppender, element RollingFile. java.lang.IllegalStateException: ManagerFactory [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory@59f99ea] unable to create manager for [/opt/tplink/EAPController/logs/server.log] with data [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$FactoryData@27efef64[pattern=/opt/tplink/EAPController/logs/server_%d{yyyy-MM-dd}_%i.log.gz, append=true, bufferedIO=true, bufferSize=8192, policy=CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=true), SizeBasedTriggeringPolicy(size=20971520)]), strategy=DefaultRolloverStrategy(min=-2147483648, max=2147483647, useMax=false), advertiseURI=null, layout=%-d{yyyy-MM-dd HH:mm:ss} [%t] [%p]-[%F:%L] - %m%n]]
at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:114)
at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:155)
at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:131)
at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:60)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:122)
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
at com.tp_link.eap.start.b.a.a.(SourceFile:15)
at com.tp_link.eap.start.EapLinuxMain.b(SourceFile:59)
at com.tp_link.eap.start.EapLinuxMain.main(SourceFile:19)

2019-11-24 22:05:42,429 main ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile. java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:224)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:130)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:122)
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
at com.tp_link.eap.start.b.a.a.(SourceFile:15)
at com.tp_link.eap.start.EapLinuxMain.b(SourceFile:59)
at com.tp_link.eap.start.EapLinuxMain.main(SourceFile:19)

2019-11-24 22:05:42,446 main ERROR Null object returned for RollingFile in Appenders.
2019-11-24 22:05:42,449 main ERROR Unable to locate appender "RollingFile" for logger config "root"
2019-11-24 22:05:42,450 main ERROR Unable to locate appender "RollingFile" for logger config "org"`

AutoBackup failed because autobackup schedule time was expired when TZ is set to Amsterdam/Europe

First a compliment, thanks for your great Omada package !

Running docker image on Synology Docker. Works great, but since upgrading from version 3 to 4.1.5 the Autobackup fails with message AutoBackup failed because autobackup schedule time was expired.
The TZ environment variable is set to Europe/Amsterdam. The log shows : INFO: Time zone set to 'Europe/Amsterdam' . The Omada user interface timezone settings show Time Zone: (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
The autobackup schedule is set to 05:00 CET.
However on the scheduled autobackup time we get error as mentioned.
In the log file

Time: 2020-10-01 05:00:08

Controller version: 4.1.5

2020-10-01 05:00:06 System Error Auto Backup failed to execute with generating file AutoBackup failed because autobackup schedule time was expired.

When I set timezone to UTC is works correctly. It seems that the Docker time is used to compare the schedule with the actual time (Docker time is UTC and which cannot be changed).

Is there a solution to this ?

Thanks,
Rob

Omada error: Failed to login!

Thank you very much for this docker image, which simplifies the usage of the omada controller :-)

Unfortunately I've a strange issue: I setup the Omada Controller together with my AP. After some time I'm not able to sign into the oama controller any more. I get the message "Failed to login!". I'm using the correct password for sure. After that, I deleted the volumes and configured Omada again and now, after a few days the same happened again.

Do you have an idea what's going wrong or where I can find some additinal logs?

[RE-OPEN] typo on --publish 29180 UDP port

Sorry for re-openning the ticket.
What I meant, was that in your docker script launch you have a typo:

-p 29810:29180/udp \

as the documentation mentions it, the port UDP 29810 should be open for EAP discovery. So I think the paramenter should be:

-p 29810:29810/udp \

otherwise, the port UDP29810 is being NATed to the port 29180 on the container which isn't listenning.
s

Many copies of index.html.xxxxx

Hi
I peeked inside a running container using Docker exec.
ls for /opt/tplink/EAPController showed that there are over 100k index.html.xxxxxx files (xxxxx seems to be sequential).
Using tag 3.2, image ID 6efd2937e619

Unable to create docker image

Dockerfile.v4.1.x used
Raspbian OS latest. Rasbpi 3 b+

root@omada:~/mydockerbuild# docker build - < Dockerfile.v4.1.x
Sending build context to Docker daemon 4.096kB
Step 1/10 : FROM ubuntu:18.04
18.04: Pulling from library/ubuntu
db182fa07ba5: Pull complete
3e85650936bd: Pull complete
258b890879c4: Pull complete
d0f858a12ece: Pull complete
Digest: sha256:e5b0b89c846690afe2ce325ac6c6bc3d686219cfa82166fc75c812c1011f0803
Status: Downloaded newer image for ubuntu:18.04
---> cd3a27be997b
Step 2/10 : MAINTAINER Matt Bentley [email protected]
---> Running in f2fd2efe0e68
Removing intermediate container f2fd2efe0e68
---> 4e94001814c8
Step 3/10 : RUN echo "**** Install Dependencies " && apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install --no-install-recommends -y gosu mongodb-server-core net-tools openjdk-8-jre-headless tzdata wget && rm -rf /var/lib/apt/lists/ && echo "* Download Omada Controller " && cd /tmp && wget -nv "https://static.tp-link.com/2020/202007/20200714/Omada_SDN_Controller_v4.1.5_linux_x64.tar.gz" && echo " Extract and Install Omada Controller " && tar zxvf Omada_SDN_Controller_v4.1.5_linux_x64.tar.gz && rm Omada_SDN_Controller_v4.1.5_linux_x64.tar.gz && cd Omada_SDN_Controller_ && mkdir /opt/tplink/EAPController -vp && cp bin /opt/tplink/EAPController -r && cp data /opt/tplink/EAPController -r && cp properties /opt/tplink/EAPController -r && cp webapps /opt/tplink/EAPController -r && cp keystore /opt/tplink/EAPController -r && cp lib /opt/tplink/EAPController -r && cp install.sh /opt/tplink/EAPController -r && cp uninstall.sh /opt/tplink/EAPController -r && ln -sf $(which mongod) /opt/tplink/EAPController/bin/mongod && chmod 755 /opt/tplink/EAPController/bin/ && echo "** Cleanup " && cd /tmp && rm -rf /tmp/Omada_SDN_Controller && echo "* Setup omada User Account ****" && groupadd -g 508 omada && useradd -u 508 -g 508 -d /opt/tplink/EAPController omada && mkdir /opt/tplink/EAPController/logs /opt/tplink/EAPController/work && chown -R omada:omada /opt/tplink/EAPController/data /opt/tplink/EAPController/logs /opt/tplink/EAPController/work
---> Running in 9ba4fb09a4e7
**** Install Dependencies ****
Get:1 http://ports.ubuntu.com/ubuntu-ports bionic InRelease [242 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports bionic-updates InRelease [88.7 kB]
Get:3 http://ports.ubuntu.com/ubuntu-ports bionic-backports InRelease [74.6 kB]
Get:4 http://ports.ubuntu.com/ubuntu-ports bionic-security InRelease [88.7 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports bionic/main armhf Packages [1277 kB]
Get:6 http://ports.ubuntu.com/ubuntu-ports bionic/multiverse armhf Packages [157 kB]
Get:7 http://ports.ubuntu.com/ubuntu-ports bionic/universe armhf Packages [11.0 MB]
Get:8 http://ports.ubuntu.com/ubuntu-ports bionic/restricted armhf Packages [12.5 kB]
Get:9 http://ports.ubuntu.com/ubuntu-ports bionic-updates/main armhf Packages [834 kB]
Get:10 http://ports.ubuntu.com/ubuntu-ports bionic-updates/universe armhf Packages [1170 kB]
Get:11 http://ports.ubuntu.com/ubuntu-ports bionic-updates/restricted armhf Packages [11.0 kB]
Get:12 http://ports.ubuntu.com/ubuntu-ports bionic-updates/multiverse armhf Packages [4408 B]
Get:13 http://ports.ubuntu.com/ubuntu-ports bionic-backports/main armhf Packages [8247 B]
Get:14 http://ports.ubuntu.com/ubuntu-ports bionic-backports/universe armhf Packages [8101 B]
Get:15 http://ports.ubuntu.com/ubuntu-ports bionic-security/multiverse armhf Packages [1849 B]
Get:16 http://ports.ubuntu.com/ubuntu-ports bionic-security/restricted armhf Packages [5504 B]
Get:17 http://ports.ubuntu.com/ubuntu-ports bionic-security/universe armhf Packages [694 kB]
Get:18 http://ports.ubuntu.com/ubuntu-ports bionic-security/main armhf Packages [567 kB]
Fetched 16.2 MB in 9s (1776 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
Package mongodb-server-core is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'mongodb-server-core' has no installation candidate
The command '/bin/sh -c echo "**** Install Dependencies " && apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install --no-install-recommends -y gosu mongodb-server-core net-tools openjdk-8-jre-headless tzdata wget && rm -rf /var/lib/apt/lists/ && echo "* Download Omada Controller " && cd /tmp && wget -nv "https://static.tp-link.com/2020/202007/20200714/Omada_SDN_Controller_v4.1.5_linux_x64.tar.gz" && echo " Extract and Install Omada Controller " && tar zxvf Omada_SDN_Controller_v4.1.5_linux_x64.tar.gz && rm Omada_SDN_Controller_v4.1.5_linux_x64.tar.gz && cd Omada_SDN_Controller_ && mkdir /opt/tplink/EAPController -vp && cp bin /opt/tplink/EAPController -r && cp data /opt/tplink/EAPController -r && cp properties /opt/tplink/EAPController -r && cp webapps /opt/tplink/EAPController -r && cp keystore /opt/tplink/EAPController -r && cp lib /opt/tplink/EAPController -r && cp install.sh /opt/tplink/EAPController -r && cp uninstall.sh /opt/tplink/EAPController -r && ln -sf $(which mongod) /opt/tplink/EAPController/bin/mongod && chmod 755 /opt/tplink/EAPController/bin/ && echo "** Cleanup " && cd /tmp && rm -rf /tmp/Omada_SDN_Controller && echo "* Setup omada User Account ****" && groupadd -g 508 omada && useradd -u 508 -g 508 -d /opt/tplink/EAPController omada && mkdir /opt/tplink/EAPController/logs /opt/tplink/EAPController/work && chown -R omada:omada /opt/tplink/EAPController/data /opt/tplink/EAPController/logs /opt/tplink/EAPController/work' returned a non-zero code: 100

docker container won't start on raspberry pi 3b

docker command:

docker run -d   --name omada-controller   --restart unless-stopped   --net host   -e MANAGE_HTTP_PORT=8088   -e MANAGE_HTTPS_PORT=8043   -e PORTAL_HTTP_PORT=8088   -e PORTAL_HTTPS_PORT=8843   -e SHOW_SERVER_LOGS=true   -e SHOW_MONGODB_LOGS=false   -e SSL_CERT_NAME="tls.crt"   -e SSL_KEY_NAME="tls.key"   -e TZ=America/Los_Angeles   -v omada-data:/opt/tplink/EAPController/data   -v omada-work:/opt/tplink/EAPController/work   -v omada-logs:/opt/tplink/EAPController/logs   mbentley/omada-controller:latest-armv7l

fails to start because mongodb doesn't start. mongd.log contains:

2021-03-17T23:42:18.689-0700 ***** SERVER RESTARTED *****
2021-03-17T23:42:18.699-0700 [initandlisten] MongoDB starting : pid=70 port=27217 dbpath=../data/db 32-bit host=raspberrypi
2021-03-17T23:42:18.699-0700 [initandlisten] 
2021-03-17T23:42:18.699-0700 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
2021-03-17T23:42:18.700-0700 [initandlisten] **       32 bit builds are limited to less than 2GB of data (or less with --journal).
2021-03-17T23:42:18.700-0700 [initandlisten] **       See http://dochub.mongodb.org/core/32bit
2021-03-17T23:42:18.700-0700 [initandlisten] 
2021-03-17T23:42:18.700-0700 [initandlisten] db version v2.6.10
2021-03-17T23:42:18.701-0700 [initandlisten] git version: nogitversion
2021-03-17T23:42:18.701-0700 [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
2021-03-17T23:42:18.701-0700 [initandlisten] build info: Linux kishi10 3.2.0-84-highbank #121-Ubuntu SMP PREEMPT Tue May 5 19:44:15 UTC 2015 armv7l BOOST_LIB_VERSION=1_58
2021-03-17T23:42:18.701-0700 [initandlisten] allocator: tcmalloc
2021-03-17T23:42:18.701-0700 [initandlisten] options: { net: { bindIp: "127.0.0.1", port: 27217 }, processManagement: { pidFilePath: "../data/mongo.pid" }, storage: { dbPath: "../data/db", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "../logs/mongod.log" } }
2021-03-17T23:42:18.720-0700 [initandlisten] journal dir=../data/db/journal
2021-03-17T23:42:18.720-0700 [initandlisten] recover : no journal files present, no recovery needed
2021-03-17T23:42:18.743-0700 [initandlisten] ERROR: mmap private failed with out of memory. You are using a 32-bit build and probably need to upgrade to 64
2021-03-17T23:42:18.743-0700 [initandlisten] Assertion: 13636:file /opt/tplink/EAPController/lib/../data/db/omada_data.3 open/create failed in createPrivateMap (look in log for more information)
2021-03-17T23:42:18.755-0700 [initandlisten] 0x7639be 0x72180a 0x70a5f0 0x70a68c 0x5cb9b0 0x5cbac4 0x5c9cd6 0x5d3f7c 0x297d6e 0x29bf7e 0x29f6fa 0x2afeb4 0x2b002c 0x1ee366 0x1ef78a 0x1f009c 0x1c4f8c 0x766cf8aa 
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo15printStackTraceERSo+0x25) [0x7639be]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo10logContextEPKc+0x15d) [0x72180a]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo11msgassertedEiPKc+0x8f) [0x70a5f0]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo11msgassertedEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x7) [0x70a68c]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo17DurableMappedFile13finishOpeningEv+0x283) [0x5cb9b0]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo17DurableMappedFile4openERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb+0xb3) [0x5cbac4]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo8DataFile12openExistingEPKc+0xed) [0x5c9cd6]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo13ExtentManager4initEv+0xab) [0x5d3f7c]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo8Database12openAllFilesEv+0x1d) [0x297d6e]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo8DatabaseC1EPKcRbRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x1ad) [0x29bf7e]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo14DatabaseHolder11getOrCreateERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_Rb+0x649) [0x29f6fa]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo6Client7Context11_finishInitEv+0x2b) [0x2afeb4]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo6Client7ContextC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_b+0x67) [0x2b002c]
 /opt/tplink/EAPController/bin/mongod() [0x1ee366]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo14_initAndListenEi+0x5ed) [0x1ef78a]
 /opt/tplink/EAPController/bin/mongod(_ZN5mongo13initAndListenEi+0x13) [0x1f009c]
 /opt/tplink/EAPController/bin/mongod(main+0x197) [0x1c4f8c]
 /lib/arm-linux-gnueabihf/libc.so.6(__libc_start_main+0x9d) [0x766cf8aa]
2021-03-17T23:42:18.759-0700 [initandlisten] warning database ../data/db omada_data could not be opened
2021-03-17T23:42:18.759-0700 [initandlisten] DBException 13636: file /opt/tplink/EAPController/lib/../data/db/omada_data.3 open/create failed in createPrivateMap (look in log for more information)
2021-03-17T23:42:18.766-0700 [initandlisten] exception in initAndListen: 13636 file /opt/tplink/EAPController/lib/../data/db/omada_data.3 open/create failed in createPrivateMap (look in log for more information), terminating
2021-03-17T23:42:18.767-0700 [initandlisten] dbexit: 

errors during start and stop

hi,

thanks for providing these docker images.

During runtime of the container, I get the following error messages:

Exception in thread "Thread-0" java.lang.IllegalArgumentException: URI is not hierarchical
        at java.io.File.<init>(File.java:418)
        at com.tp_link.eap.util.g.a.a(SourceFile:47)
        at com.tp_link.eap.configuration.b.a(SourceFile:58)
        at com.tp_link.eap.util.o.c(SourceFile:443)
        at com.tp_link.eap.util.o.b(SourceFile:434)
        at com.tp_link.eap.start.f.run(SourceFile:35)
startup...
Nov 09, 2019 4:26:56 AM org.hibernate.validator.internal.util.Version <clinit>
INFO: HV000001: Hibernate Validator 4.3.1.Final
Omada Controller started
ShutdownHook: service stopped.
Exception in thread "Thread-0" java.lang.IllegalArgumentException: URI is not hierarchical
        at java.io.File.<init>(File.java:418)
        at com.tp_link.eap.util.g.a.a(SourceFile:47)
        at com.tp_link.eap.configuration.b.a(SourceFile:58)
        at com.tp_link.eap.util.o.c(SourceFile:443)
        at com.tp_link.eap.util.o.b(SourceFile:434)
        at com.tp_link.eap.start.f.run(SourceFile:35)
startup...
Nov 09, 2019 1:05:55 PM org.hibernate.validator.internal.util.Version <clinit>
INFO: HV000001: Hibernate Validator 4.3.1.Final
Omada Controller started


ShutdownHook: service stopped.

Certificate import

Hello,

Using the latest version of the container, I placed a certificate and key file into the certs folder in the omada-data volume, but the container does not seem to pick them up, whether or not I use the environment variables to specify the tls.key and tls.crt file names.

I don't see any relevant errors in the logs, and the certificate was generated by FreeIPA/Certmonger. If I package them up and import them via the web interface they work as desired.

Is this no longer possible in the latest version, or do I have a mistake somewhere?

Thanks,

Thomas

Controller Mail Server

Hi,

First off. Great work and thank you very much.

Secondly, is it possible for the mail server settings in the controller to send email notifications? I have put in the same settings as I have in my nas which works just fine.

Any assistance would be grateful.

Thanks,
Kirk

I can't login to Omada

I try enter in the soft Omada but i can't, i create an account on the official page Omada Controller but not work when want enter on the docker. It throws me a popup that my username is invalid. And if instead I try to recover my password, it also launches a pop-up window that says Email server is not set. Please check your settings and try again.

Certificate does not mount correctly

Before everything, thanks for supporting this repository, you are doing a great job.

The container is not reading the cert/tls.key and cert/tls.crt it is correctly setup and is right in the / path from the container. But my guess is that it isn't configured correctly to know that this path has the certificates.

In this image you will see my configuration, it is pretty much the same as your command, I use docker-compose for confort.

image

And in this another image you will see that I did docker exec to get inside the container, I have printed the tls.key, as you can see it is there.

But at the end of the day, omada is just getting the self signed certificate and is ignoring the mine.
image

Please let me know if you can give me some clues for fixing it, I am having issues with Apple hotspot.

Unable to bind to cloud controller

When i want to bind the SDN Controller to the cloud Controller i get the message that the SDN controller is unable to connect to the server. In the logs i see the following error:
2020-08-14 19:56:25 [qtp1807648168-70] [ERROR]-[SourceFile:848] - Apply deviceId failed, errorCode is -7111, msg is Cannot get response from server.

Unable to run on Raspberry Pi 3 Model B+

Hi, I'm trying to run the arm64 image on a RPi 3 B+ with the command I copied from the readme:

docker run -d \
  --name omada-controller \
  --restart unless-stopped \
  -e TZ=Etc/UTC \
  -e SMALL_FILES=false \
  -p 8088:8088 \
  -p 8043:8043 \
  -p 27001:27001/udp \
  -p 27002:27002 \
  -p 29810:29810/udp \
  -p 29811:29811 \
  -p 29812:29812 \
  -p 29813:29813 \
  -v omada-data:/opt/tplink/EAPController/data \
  -v omada-work:/opt/tplink/EAPController/work \
  -v omada-logs:/opt/tplink/EAPController/logs \
  mbentley/omada-controller:3.2-arm64

The container is crashing with the following error:
standard_init_linux.go:211: exec user process caused "exec format error"

AFAIK this relates to the architecture, but the arm64 image should be compatible with RPi3 right?

Feature Suggestion: Support v4.2.4

Thanks very much for this project!

I'm no Docker/Github whiz, but I forked your project to semi-crudely tweak it to install Omada Software Controller v4.2.4 after running into an SSID Override bug in v4.1.5.

The newer version did fix the bug, and while there's nothing pull-request-worthy about the changes I made, I want to let you know of a pain point I ran into: I couldn't for the life of me get access to the v4.2.4 interface until I ultimately substituted the v4.1.5 eap.cer and eap.keystore files for those that shipped with v4.2.4.

I don't honestly know if that was a smart or dumb move, and you won't find that addressed in my fork, as I found it easier to simply add an /opt/tplink/EAPController/keystore bind mount and replace them post-deployment.

If you decide to support v4.2.4, I hope some part of this helps 👍

Please add tzdata to docker image

I'd like to set the timezone inside the docker image (so wifi schedules actually happen when I expect them to happen and not at UTC).
Afaics, this needs tzdata installed inside the container?

mongod fails to start

I'm trying to get this running on an RPi 3 with Ubuntu 18 (64-bit). See the following branch for my changes: https://github.com/jeremyhiggs/docker-omada-controller/tree/arm64

I've linked in the versions of java and mongod. Omada seems to complain that the connection is refused when trying to access mongod. It seems that it is never run, though. No files are created in /opt/tplink/EAPController/data/db/, and /var/log/mongodb/ is empty.

If I run mongod --dbpath /opt/tplink/EAPController/data/db/, it starts fine and creates the files.

Have you seen this before? Any tips?

x86 Xpenology

Is it possible to run software on x86 Xpenology Docker? I tried 4.1 version, and latest. Container showing me that it works, but i can't get acces over port 8088, 8843.

Service fails to start

I am getting the following error when trying to run this on a Synology NAS:

Exception in thread "Thread-0" java.lang.IllegalArgumentException: URI is not hierarchical | stdout
    at java.io.File.<init>(File.java:418)
    at com.tp_link.eap.util.g.a.a(SourceFile:47)
    at com.tp_link.eap.configuration.b.a(SourceFile:58)
    at com.tp_link.eap.util.o.c(SourceFile:443) | stdout
    at com.tp_link.eap.util.o.b(SourceFile:434)
    at com.tp_link.eap.start.f.run(SourceFile:35)

Folders have been set up and permissions have been set to everyone RW.

Ideas?

Create SSL certificate

Hi, thanks for your work on this container!

I have it running using a docker-compose file, but when trying to access the container it keeps complaining about an invalid SSL certificate (because there is none). Would it be possible to add one? If so, can you point me in the right direction perhaps?

The container can be ran without one, by accepting the risks ofc, but a selfsigned certificate might be nicer

This x.x.x.x page can’t be found

Hi mbentley,
Hi everyone,

An error message is returned, when accessing the login page:
No webpage was found for the web address: http://x.x.x.x:7086/login
HTTP ERROR 404

Logs:
INFO: Time zone set to 'Europe/Berlin'
INFO: Starting Omada Controller as user omada
2021-03-17 22:05:51 [log4j-thread] [INFO]-[SourceFile:29] - success to load configuration omada.properties
2021-03-17 22:05:52 [main] [INFO]-[SourceFile:89] - going to start local mongod.
2021-03-17 22:05:56 [main] [INFO]-[SourceFile:167] - mongodb process id is 44
2021-03-17 22:05:56 [main] [INFO]-[SourceFile:148] - Mongo DB server started
2021-03-17 22:06:09 [main] [INFO]-[SourceFile:35] - monitor context initialing...
2021-03-17 22:06:10 [main] [INFO]-[SourceFile:290] - restart all customize tasks.
2021-03-17 22:06:11 [main] [INFO]-[SourceFile:126] - no need to compatible db.
2021-03-17 22:06:11 [main] [INFO]-[SourceFile:20] - Omada Controller started
2021-03-17 22:06:12 [device-discovery-server] [INFO]-[SourceFile:54] - Start device discovery server
2021-03-17 22:06:12 [device-manage-server] [INFO]-[SourceFile:111] - Start device manage server
2021-03-17 22:06:12 [device-adopt-server] [INFO]-[SourceFile:82] - Start device adopt server
2021-03-17 22:06:42 [scheduled-pool-5] [INFO]-[SourceFile:111] - Controller has not bound owner, cancel online checking Firmware tasks.
2021-03-17 22:07:10 [scheduled-pool-3] [INFO]-[SourceFile:106] - Start Controller Dst Task.

Smells like an insufficient permission, but I can't figure it out on my own :(

Docker-compose via Portainer:

version: "2.1"
services:
omada-controller:
image: mbentley/omada-controller
container_name: omada
environment:
- TZ=Europe/Berlin
- MANAGE_HTTP_PORT=8088
- MANAGE_HTTPS_PORT=8043
- PORTAL_HTTP_PORT=8088
- PORTAL_HTTPS_PORT=8843
- SHOW_SERVER_LOGS=true
- SHOW_MONGODB_LOGS=false
volumes:
- /volume6/docker/omada/data:/opt/tplink/EAPController/data
- /volume6/docker/omada/logs:/opt/tplink/EAPController/logs
- /volume6/docker/omada/work:/opt/tplink/EAPController/work
ports:
- 7086:8088 # manage http port
- 7087:8043 # manage https port
- 7088:8843 # portal https port
- 29810:29810
- 29810:29810/udp
- 29811:29811
- 29811:29811/udp
- 29812:29812
- 29812:29812/udp
- 29813:29813
- 29813:29813/udp
restart: unless-stopped

Help is much appreciated

Cheers

Fails start, re-start loop

Updated container on Synology NAS. Downloaded 'Latest' container
Followed additional instruction; Stopped container, cleared out existing folders (logs, work, data)
'Cleared' container, Restarted container, get the following in the log errors:

INFO: Time zone set to 'Europe/London'
INFO: Starting Omada Controller as user omada
error: exec: "/opt/tplink/EAPController/jre/bin/java": stat /opt/tplink/EAPController/jre/bin/java: no such file or directory
INFO: Time zone set to 'Europe/London'

And repeat!

I'm no expert so using the Docker GUI on DSM
Thanks,
image

Impossible to change http port? (container stuck in starting loop)

Hi!

I'm using the following docker compose in portioner to create my container:

version: '2.2'

services:
  omada:
    image: mbentley/omada-controller:4.2
    restart: unless-stopped
    container_name: omada-controller
    network_mode: host
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/timezone:/etc/timezone:ro"
      - "/zfs/NAS/config/omada/data:/opt/tplink/EAPController/data"
      - "/zfs/NAS/config/omada/work:/opt/tplink/EAPController/work"
      - "/zfs/NAS/config/omada/logs:/opt/tplink/EAPController/logs"
    environment:
      - MANAGE_HTTP_PORT=9088
      - MANAGE_HTTPS_PORT=8043
      - PORTAL_HTTP_PORT:=9088
      - PORTAL_HTTPS_PORT=8843
      - SHOW_SERVER_LOGS=true
      - SHOW_MONGODB_LOGS=false
      - TZ=Europe/Stockholm

I changed the HTTP port because 8088 is apparently already in use (I'm not aware of anything using that port, but the easiest solution was to just use a different port). However, it looks like the container refuses to use the new port (9088) because it still complains about 8088 being in use. See the logs here:

INFO: Time zone set to 'Europe/Stockholm'
INFO: Setting 'manage.http.port' to 9088
INFO: Database directory missing; creating '/opt/tplink/EAPController/data/db'
done
INFO: Starting Omada Controller as user omada
2021-03-28 03:55:53 [main] [INFO]-[SourceFile:29] - success to load configuration omada.properties
2021-03-28 03:55:53 [main] [INFO]-[SourceFile:89] - going to start local mongod.
2021-03-28 03:55:55 [main] [INFO]-[SourceFile:167] - mongodb process id is 38
2021-03-28 03:55:55 [main] [INFO]-[SourceFile:148] - Mongo DB server started
2021-03-28 03:55:55 [main] [ERROR]-[SourceFile:103] - Port 8088 is already in use.
2021-03-28 03:55:55 [main] [ERROR]-[SourceFile:128] - Port 8088 is already in use. Release the port and try again.
2021-03-28 03:55:55 [main] [ERROR]-[SourceFile:263] - Environment is not ok for controller running
Bootstrap prepare failed, going to exit.
ShutdownHook: service stopped.
INFO: Time zone set to 'Europe/Stockholm'
WARNING: Unable to change 'manage.http.port' to 9088 after initial run; change the ports via the web UI
INFO: Starting Omada Controller as user omada
2021-03-28 03:56:04 [log4j-thread] [INFO]-[SourceFile:29] - success to load configuration omada.properties
2021-03-28 03:56:04 [main] [INFO]-[SourceFile:89] - going to start local mongod.
2021-03-28 03:56:06 [main] [INFO]-[SourceFile:167] - mongodb process id is 32
2021-03-28 03:56:06 [main] [INFO]-[SourceFile:148] - Mongo DB server started
2021-03-28 03:56:06 [main] [ERROR]-[SourceFile:103] - Port 8088 is already in use.
2021-03-28 03:56:06 [main] [ERROR]-[SourceFile:128] - Port 8088 is already in use. Release the port and try again.
2021-03-28 03:56:06 [main] [ERROR]-[SourceFile:263] - Environment is not ok for controller running
Bootstrap prepare failed, going to exit.
ShutdownHook: service stopped.
...

and so on.

Is this a bug or am I doing something wrong?

Unable to start container due to mongodb

I havent been able to get the container to start due to issues with mongodb. I have done all the usual things:

Have ensured that there is plenty of space both in docker root and the bind mount folders
Ensured permissions are correct

The container is being run using the command on the webpage except for the -v option

Any suggestions?

But the logs show this:

INFO: Time zone set to 'Etc/UTC'


WARNING: smallfiles was passed but is not supported in >= 4.1 with the WiredTiger engine in use by MongoDB


INFO: skipping setting smallfiles option


WARNING: owner or group (0:0) not set correctly on '/opt/tplink/EAPController/data'


INFO: setting correct permissions


WARNING: owner or group (0:0) not set correctly on '/opt/tplink/EAPController/work'


INFO: setting correct permissions


WARNING: owner or group (0:0) not set correctly on '/opt/tplink/EAPController/logs'


INFO: setting correct permissions


INFO: Starting Omada Controller as user omada


2021-03-18 17:18:24 [log4j-thread] [INFO]-[SourceFile:29] - success to load configuration omada.properties


2021-03-18 17:18:25 [main] [INFO]-[SourceFile:89] - going to start local mongod.


2021-03-18 17:20:05 [main] [WARN]-[SourceFile:151] - Fail to start mongo DB server


2021-03-18 17:20:05 [main] [WARN]-[SourceFile:78] - com.tplink.omada.start.a.a: Fail to start mongo DB server


com.tplink.omada.start.a.a: Fail to start mongo DB server


	at com.tplink.omada.start.b.d.a(SourceFile:152) ~[omada-start.jar:?]


	at com.tplink.omada.start.b.b.e(SourceFile:75) [omada-start.jar:?]


	at com.tplink.omada.start.OmadaBootstrap.d(SourceFile:223) [omada-start.jar:?]


	at com.tplink.omada.start.OmadaBootstrap.q(SourceFile:287) [omada-start.jar:?]


	at com.tplink.omada.start.OmadaBootstrap.a(SourceFile:100) [omada-start.jar:?]


	at com.tplink.omada.start.OmadaBootstrap.e(SourceFile:245) [omada-start.jar:?]


	at com.tplink.omada.start.OmadaLinuxMain.b(SourceFile:80) [omada-start.jar:?]


	at com.tplink.omada.start.OmadaLinuxMain.main(SourceFile:25) [omada-start.jar:?]

Error Code -1 (General Error) on External Portal Server authorize API (Omada Controller v.4.1.5)

Omada Controller version : 4.1.5
Device Model: EAP225(US) v3.0
Firmware Version: 2.20.1 Build 20200630 Rel. 41064

Hi, I'm trying to implement external portal server based on this FAQ,
and is currently stuck at Step 8.

I was able to login to the Omada Controller (Step 7) and received the CSRF Token.

But received an error when trying to authorize the client (Step 8):

URL:
https://192.168.1.64:8043/api/v2/hotspot/extPortal/auth?token=05a5c488581148d7a17e0214f68ba0dc

Body:

{
    "clientMac" : "3C-15-C2-DE-D2-88",
    "ssidName" : "RUA",
    "apMac" : "50-D4-F7-5B-87-78",
    "radioId" : "1",
    "t" : "1600588644",
    "site" : "Default",
    "time" : "21600"
}

Note: Headers and Cookies have been set correctly as well

Response:

{
    "errorCode": -1,
    "msg": "General error."
}

server.log

2020-09-19 15:58:01 [qtp1976804832-1868] [ERROR]-[SourceFile:98] - java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException: null
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_265]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_265]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_265]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_265]
	at com.tplink.omada.apigateway.dispatch.chain.a.a(SourceFile:79) [omada-api-gateway-4.1.5.jar:?]
	at com.tplink.omada.apigateway.dispatch.RestDispatcher.a(SourceFile:74) [omada-api-gateway-4.1.5.jar:?]
	at com.tplink.omada.web.controller.ApiController.a(SourceFile:57) [omada-web-4.1.5.jar:?]
	at sun.reflect.GeneratedMethodAccessor606.invoke(Unknown Source) ~[?:?]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_265]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_265]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) [spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) [spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) [spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) [spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) [spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) [spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) [spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908) [spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) [javax.servlet-api-3.1.0.jar:3.1.0]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) [spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [javax.servlet-api-3.1.0.jar:3.1.0]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:873) [jetty-servlet-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1623) [jetty-servlet-9.4.15.v20190215.jar:9.4.15.v20190215]
	at com.tplink.omada.web.filter.CacheControlFilter.doFilter(SourceFile:51) [omada-web-4.1.5.jar:?]
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) [jetty-servlet-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) [shiro-core-1.4.0.jar:1.4.0]
	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) [shiro-core-1.4.0.jar:1.4.0]
	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) [shiro-core-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) [shiro-web-1.4.0.jar:1.4.0]
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) [shiro-web-1.4.0.jar:1.4.0]
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610) [jetty-servlet-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540) [jetty-servlet-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) [jetty-security-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1701) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480) [jetty-servlet-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1668) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:220) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.Server.handle(Server.java:502) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:370) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:267) [jetty-server-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305) [jetty-io-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) [jetty-io-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:427) [jetty-io-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:321) [jetty-io-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:159) [jetty-io-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) [jetty-io-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) [jetty-io-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333) [jetty-util-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310) [jetty-util-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168) [jetty-util-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126) [jetty-util-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366) [jetty-util-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765) [jetty-util-9.4.15.v20190215.jar:9.4.15.v20190215]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683) [jetty-util-9.4.15.v20190215.jar:9.4.15.v20190215]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_265]
Caused by: java.lang.NullPointerException
	at com.tplink.omada.service.auth.impl.AuthServiceImpl.a(SourceFile:661) ~[omada-service-4.1.5.jar:?]
	at com.tplink.omada.service.auth.impl.AuthServiceImpl.a(SourceFile:150) ~[omada-service-4.1.5.jar:?]
	at com.tplink.omada.service.LockWrapperService.j(SourceFile:237) ~[omada-service-4.1.5.jar:?]
	at com.tplink.omada.service.LockWrapperService.n(SourceFile:119) ~[omada-service-4.1.5.jar:?]
	at com.tplink.omada.service.auth.impl.AuthServiceImpl.a(SourceFile:176) ~[omada-service-4.1.5.jar:?]
	at com.tplink.omada.service.api.impl.ClientApiServiceImpl.a(SourceFile:410) ~[omada-service-4.1.5.jar:?]
	... 84 more

eap discovery not working using docker run example

The docker run example doesn't forward the necessary ports to enable eap discovery. I have got it working with:

docker run -d --name omada-controller --restart unless-stopped -p 8088:8088 -p 8043:8043 -p 29810:29810/udp -p 29811:29811 -p 29812:29812 -p 29813:29813 -v omada-data:/opt/tplink/EAPController/data -v omada-work:/opt/tplink/EAPController/work -v omada-logs:/opt/tplink/EAPController/logs mbentley/omada-controller

Please fix the read.me
Testen on Synology DS918+

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.