Git Product home page Git Product logo

unifi's Introduction

UniFi Docker Container

Latest Build Status Docker Pulls Docker Stars License

Docker tags:

Tag UniFi Version Description Release Date
8.1, 8.1-alpine, 8.1-debian, 8.1-ubuntu, latest, latest-alpine, latest-debian, latest-ubuntu 8.1.113 UniFi Network Application official release 2024-03-26
8.1-beta, 8.1-alpine-beta, 8.1-debian-beta, 8.1-ubuntu-beta, latest-beta, latest-alpine-beta, latest-debian-beta, latest-ubuntu-beta 8.1.127 UniFi Network Application beta/release candidate 2024-04-18
8.0, 8.0-alpine, 8.0-debian, 8.0-ubuntu 8.0.28 UniFi Network Application official release 2024-01-25
8.1.113 8.1.113 Static official release tag/image 2024-03-26
8.0.28 8.0.28 Static official release tag/image 2024-01-25
7.5.187 7.5.187 Static official release tag/image 2023-10-17
7.4.162 7.4.162 Static official release tag/image 2023-07-03
7.3.83 7.3.83 Static official release tag/image 2023-01-30
7.2.97 7.2.97 Static official release tag/image 2023-02-06
7.1.68 7.1.68 Static official release tag/image 2022-08-02
7.0.25 7.0.25 Static official release tag/image 2022-03-28
6.5.55 6.5.55 Static official release tag/image 2021-12-16
6.4.54 6.4.54 Static official release tag/image 2021-09-20
6.2.26 6.2.26 Static official release tag/image 2021-06-24
6.1.71 6.1.71 Static official release tag/image 2021-03-25
6.0.45 6.0.45 Static official release tag/image 2021-01-26
5.14.23 5.14.23 Static official release tag/image 2020-08-25
5.13.32 5.13.32 Static official release tag/image 2020-07-02
5.12.72 5.12.72 Static official release tag/image 2020-05-18
5.11.50 5.11.50 Static official release tag/image 2019-10-08
5.6.42 5.6.42 Static official release tag/image 2019-05-03


NOTE: Alpine tags DO NOT contain any internal MongoDB binaries. You must connect them to an external Mongo DB container or other host instance.

2023-12-21: Info and proposed changes for Debian-base MongoDB 3.6 Release Signing Key EXPKEYSIG 2023-12-20: MongoDB 3.6 Debian repo signing key has expired, apt-get refuses to install packages from this repo without setting insecure options.

ALL RELEASES AFTER v8.0.26 WILL BE UPDATED TO USE THE UBUNTU BASED BUILD AS THE LATEST/CURRENT VERISON TAG. DEBIAN BASE WILL BE MOVED TO A NEWER VERSION OF MONGODB, NON-MONGO BUILD, OR PHASED OUT ENTIRELY IN THE NEAR FUTURE.**

Current beta tags of v8.0.X have been rebuilt with Ubuntu as the default. Please test and report any bugs, or issues on GitHub


For security/attack surface reduction the container is configured to run the UniFi processes as an internal user & group unifi having a pre-set UID & GID of 999. The container will attempt to adjust permissions on mapped volumes and data to match before dropping privileges to start the UniFi Java and Mongo processes. If the container is being run with a different Docker --user setting permissions may need to be fixed manually.

IE: chown -R 999:999 ./{cert,data,logs}

A custom UID and GID can be configured for the container internal unifi user and group. For more information see the "Environment variables" section in this document.


ALWAYS MAKE A VERIFIED BACKUP OF DATA BEFORE INSTALLING UPDATES. Export a .unf from the web interface and/or stop the current container and create a backup or copy of the data volume. Database rollback from newer to older versions of UniFi and/or Mongo isn't always possible.


Usage

This container exposes three volumes:

  • /usr/lib/unifi/cert - SSL custom certificate storage
  • /usr/lib/unifi/data - UniFi configuration data and DBs
  • /usr/lib/unifi/logs - UniFi and MongoDB logs for troubleshooting

This container exposes the following ports (see: https://help.ubnt.com/hc/en-us/articles/218506997-UniFi-Ports-Used):

  • 3478/udp (port used for STUN connection)
  • 6789/tcp (port used for throughput measurement from Android/iOS app)
  • 8080/tcp (port for UAP/USW/USG to inform controller)
  • 8443/tcp (port for controller GUI / API)
  • 8880/tcp (port for HTTP portal redirect)
  • 8843/tcp (port for HTTPS portal redirect)
  • 10001/udp (port used for UBNT discovery broadcasts - Local LAN/L2/same subnet only)

The most basic way to run this container:

$ docker run --name unifi -d \
    -p 3478:3478/udp -p 8080:8080 -p 8443:8443 \
    -p 8880:8880 -p 8843:8843 \
    ghcr.io/goofball222/unifi

Recommended run method: Docker Compose - UniFi app and internal Mongo DB:

version: '3'

services:
  unifi:
    image: ghcr.io/goofball222/unifi
    container_name: unifi
    restart: unless-stopped
    network_mode: bridge
    ports:
      - 3478:3478/udp
      - 8080:8080
      - 8443:8443
      - 8880:8880
      - 8843:8843
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./cert:/usr/lib/unifi/cert
      - ./data:/usr/lib/unifi/data
      - ./logs:/usr/lib/unifi/logs
    environment:
      - TZ=UTC

Recommended run method: Docker Compose - UniFi app and Mongo DB as separate services:

version: '3'

services:
  mongo:
#   Use max mongo version 5.0.X. Higher versions are incompatible with the mongo driver built into Unifi.
#   Older versions are acceptable, ie: mongo:3.6
    image: mongo:5.0
    container_name: unifidb
    restart: unless-stopped
#   By default docker-compose will create a new bridge network for the services in the compose file.
#   Enable this to have the services/containers use the existing docker0/default bridge network.
#    network_mode: bridge
    volumes:
      - ./data/db:/data/db

  unifi:
    image: ghcr.io/goofball222/unifi
    container_name: unifi
    restart: unless-stopped
#   By default docker-compose will create a new bridge network for the services in the compose file.
#   Enable this to have the services/containers use the existing docker0/default bridge network.
#    network_mode: bridge
    links:
      - mongo
    ports:
      - 3478:3478/udp
      - 8080:8080
      - 8443:8443
      - 8880:8880
      - 8843:8843
#     Optional: Uncomment to enable speed tests from the UniFi iOS & Android apps
#      - 6789:6789
#     Optional: Uncomment for layer 2 broadcast discovery if container running on a host in the local LAN
#      - 10001:10001/udp
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./cert:/usr/lib/unifi/cert
      - ./data:/usr/lib/unifi/data
      - ./logs:/usr/lib/unifi/logs
    environment:
      - DB_MONGO_LOCAL=false
      - DB_MONGO_URI=mongodb://mongo:27017/unifi
      - STATDB_MONGO_URI=mongodb://mongo:27017/unifi_stat
      - TZ=UTC
      - UNIFI_DB_NAME=unifi

Alternative network setup suggested by rogierlommers -

Please make sure to read the "NETWORK: HOST" section of the Docker "run" reference and understand the implications of this before using.

Copy the following to both services in the docker-compose.yml file under the commented out network_mode: bridge line in the example above, and then uncomment the network_mode: host line:

#   Use host network mode. Does not allow for port remapping. You may need to manually adjust
#       host firewall settings to allow traffic. Running a container in this mode is considered insecure.
#    network_mode: host

Example basic docker-compose.yml in file form.

Example advanced docker-compose.yml in file form with external Mongo DB service and UniFi service using environment variables.


Environment variables:

Variable Default Description
BIND_PRIV false Set to true to allow UniFi process to bind to container internal ports < 1024
DEBUG false Set to true for extra container and UniFi verbosity for debugging
JVM_EXTRA_OPTS unset Any additional custom run flags for the container Java process
JVM_INIT_HEAP_SIZE unset Sets the start and min memory size for the container Java process (-Xms)
JVM_MAX_HEAP_SIZE 1024M Sets the max memory size for the container Java process (-Xmx)
LOGSTDOUT false Set to true to enable the (noisy!) UniFi process log output to STDOUT. System will still output to log volume files if configured.
PGID 999 Specifies the GID for the container internal unifi group (used for file ownership)
PUID 999 Specifies the UID for the container internal unifi user (used for process and file ownership)
READENV true Set to false to disable environment variables conversion to UniFi system.properties settings.
RUN_CHOWN true Set to false to disable the container automatic chown at startup. Speeds up startup process on overlay2 Docker hosts. NB/IMPORTANT: It's critical that you insure directory/data permissions on all mapped volumes are correct before disabling this or UniFi and/or Mongo will not start.
RUNAS_UID0 false Set to true to force the container to run the Java/Mongo processes as UID=0 (root) - workaround for setcap AUFS missing xargs failure - NB/IMPORTANT: running with this set to "true" is insecure

Recommended UniFi system.properties converted environment variables to externalize Mongo DB via docker-compose:

Variable Recommended Setting Description
DB_MONGO_LOCAL false Setting this to false tells UniFi that we're using an external Mongo DB
DB_MONGO_URI mongodb://mongo:27017/unifi This sets the URI that UniFi should connect to for the main configuration database
STATDB_MONGO_URI mongodb://mongo:27017/unifi_stat This sets the URI that UniFi should connect to for the statistics database
UNIFI_DB_NAME unifi Sets a database name that can be connected and managed on the external Mongo DB server, must match with the URI variables (IE: unifi, unifi_stat = unifi).

NB/IMPORTANT: Although I've been running my own deployments with an external DB without issue with these settings externalizing the DB, just like running the app itself in a Docker container, is considered experimental and totally unsupported by UBNT. Full documentation for an external DB setup is outside the scope of this README and is left as an exercise for the interested reader. Additional information available on the UBNT forums in this post and in the PDF post linked below.

Additional UniFi system.properties config file settings can be passed to the container as -e/--env/environment flags at runtime (more detail and a PDF with UBNT examples here). Envrionment variables must be in ALL CAPS and replace "." with "_". -- IE:

system.properties Environment Variable
unifi.db.extraargs UNIFI_DB_EXTRAARGS
unifi.https.hsts UNIFI_HTTPS_HSTS

SSL custom certificate auto-configuration support (LetsEncrypt, etc.):

  1. Map the Docker host cert storage location or volume to the /usr/lib/unifi/cert volume exposed by the container
  2. Must contain a PEM format SSL private key corresponding to the SSL certificate to be installed. Private key file MUST be named privkey.pem.
  3. Must contain a PEM format SSL certificate file with the full certification chain. LetsEncrypt handles this automatically, other providers may need manual work (https://www.digicert.com/ssl-support/pem-ssl-creation.htm). Certificate file MUST be named fullchain.pem.
  4. Start the container. SSL import and Java keystore update process is automated during startup. Status, errors, etc. can be found in the container log, IE: docker logs "containername"
  5. Existing keystore file will be backed up to /usr/lib/unifi/data/keystore-"epochseconds"
  6. Java keystore is only updated when changes to the certificate files are detected. To force a re-import of existing files delete the unificert.sha256 file in ./cert and restart the container.

If you don't want to use a custom SSL certificate then the /usr/lib/unifi/cert volume can be left unmapped. Alternatively if the privkey.pem and/or fullchain.pem file are not present SSL customization will be skipped.

To revert from a custom cert to a UniFi self-signed certificate stop the container, rename or remove ./data/keystore, and restart the container. The UniFi application will automatically generate a new keystore file with a new self-signed cert.


beta and bleeding-edge official tag warning

NOT RECOMMENDED FOR USE IN A PRODUCTION ENVIRONMENT - FOR TESTING/LABS ONLY

There have been past UniFi beta and official releases with AP bricking firmware, network breaking bugs, etc.

Proceed with caution! Use at your own risk.

If you're going to use these images please make sure you create a UBNT community account: https://community.ui.com/

Instructions for how to sign up for beta/early access at: https://help.ui.com/hc/en-us/articles/204908664-How-To-Sign-Up-for-Early-Access

Please make sure to participate in discussion and create bug reports for any issues you encounter with beta/early access releases.

USE BETA/BLEEDING-EDGE RELEASES AT YOUR OWN RISK - REPEAT: NOT RECOMMENDED FOR USE IN A PRODUCTION ENVIRONMENT WITHOUT EXTENSIVE TESTING

unifi's People

Contributors

alex-stout avatar chicheng avatar dependabot[bot] avatar fharbe avatar goofball222 avatar imajes avatar jokay avatar jrreid avatar

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

unifi's Issues

Host mode or port forwarding both have issues

Reporting bugs/issues

  • Please provide the following information:
    • OS/distribution version (command for your OS may differ):
      No LSB modules are available.
      Distributor ID: Ubuntu
      Description: Ubuntu 19.10
      Release: 19.10
      Codename: eoan

    • Docker version:
      Docker version 19.03.8, build afacb8b7f0

    • Labels from container:
      "Labels": { "org.label-schema.build-date": "2020-03-24T03:15:31Z", "org.label-schema.license": "Apache-2.0", "org.label-schema.name": "UniFi Controller", "org.label-schema.schema-version": "1.0", "org.label-schema.url": "https://github.com/goofball222/unifi", "org.label-schema.vcs-ref": "c9d0384", "org.label-schema.vcs-url": "https://github.com/goofball222/unifi.git", "org.label-schema.vendor": "The Goofball - [email protected]", "org.label-schema.version": "5.12.66" }

    • Details on how to reproduce the trouble, if available:
      with network host mode:
      now Portainer says "Unhealthy" after the container has started. I can also not access it.

    container_name: unifi
    image: goofball222/unifi
    network_mode: host
    restart: unless-stopped
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ${USERDIR}/docker/unifi/cert:/usr/lib/unifi/cert
      - ${USERDIR}/docker/unifi/data:/usr/lib/unifi/data
      - ${USERDIR}/docker/unifi/logs:/usr/lib/unifi/logs
  • Details on how to reproduce the trouble, if available:
    without host mode, with port forwarding.
    Now I can access the controller, I can change my IP under Settings>Controller to the IP address of the host machine since it is part of the LAN. Immediately the 2 AC In-Wall APs are discovered.
    PROBLEM: adoption fails, even after hard resetting the APs.
  container_name: unifi
  image: goofball222/unifi
  restart: unless-stopped
  environment:
    - PUID=${PUID}
    - PGID=${PGID}
    - TZ=${TZ}
  volumes:
    - /etc/localtime:/etc/localtime:ro
    - ${USERDIR}/docker/unifi/cert:/usr/lib/unifi/cert
    - ${USERDIR}/docker/unifi/data:/usr/lib/unifi/data
    - ${USERDIR}/docker/unifi/logs:/usr/lib/unifi/logs
  ports:
    - 3478:3478/udp
    - 8888:8080
    - 8443:8443
    - 8880:8880
    - 8843:8843
    - 6789:6789 # allows speed tests from Unifi apps
    - 10001:10001/udp # allows layer 2 broadcast discovery when running on host in local LAN```

Unifi 5.11.50 After changing from docker mode to swarm, AP cannot connect

unifi image version :5.11.50
docker version 19.03.5, build 633a0ea
docker-compose version 1.25.0, build 0a186604

changing from docker mode to swarm,the previously used cert, data, and logs directories are mounted. After successful startup, you can normally enter the management interface and see the previous settings, but you cannot connect to the AP, and the device page displays disconnection.

Docker missing unstable

Docker is missing the unstable release. Maybe old unused tags could be cleaned up as well (show up when pulling images with a docker GUI like Synology)

Low Database Performance

Using external mongo, database is really slow. Restores change from 30 minutes to local mongodb to 4-5 hours.

Ubuntu 16.04.6
Managed under Rancher
Separate hosts, seems like it's single threaded and maybe multithreaded using local db?

Version 5.9.16 statistics in dashboard bugged. @works on a cloud key (confirmed)

Reporting bugs/issues

  • When reporting a bug/issue:

    • Ensure that you are using the latest release.
    • Revert any custom modifications or environment varibles to insure they're not the cause.
  • Please provide the following information:

    • OS/distribution version (command for your OS may differ):
      IE:
    user@host:~$ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 16.04.3 LTS
    Release:        16.04
    Codename:       xenial
    • Docker version:
      IE:
    user@host:~$ docker --version
    Docker version 17.05.0-ce, build 89658be
    • Labels from container:
      IE:
    user@host:~$ docker inspect goofball222/unifi:<tagname>
    ...
                "Labels": {
                    "org.label-schema.build-date": "2017-10-23T18:06:18Z",
                    "org.label-schema.license": "Apache-2.0",
                    "org.label-schema.name": "UniFi Controller",
                    "org.label-schema.schema-version": "1.0",
                    "org.label-schema.url": "https://github.com/goofball222/unifi",
                    "org.label-schema.vcs-ref": "dc9ca9c",
                    "org.label-schema.vcs-url": "https://github.com/goofball222/unifi.git",
                    "org.label-schema.vendor": "goofball222",
                    "org.label-schema.version": "5.6.19"
                }
    ...
    • Details on how to reproduce the trouble, if available:

I am running your image on Synology docker.
I am running the 5.9.16 version.

In the top left corner it shows "ISP LOAD" in the docker image it says unknown. And it does not populate with data

i have attached photo's of the problem where its running on a Docker image. and when it runs on a Unifi Cloud key, with the same controller version 5.9.16.
2 2
1 1
2
1

recreating container (with sep mongo) resets unifi

hello!

I've setup unifi + unfi-db containers via compose. If I want to upgrade the unifi container, I should be able to stop it and recreate it, by running something like the following: docker stop unifi && docker-compose up -d.

Expected behavior: new version pops up, I log into Unifi Controller again and all is good.

Actual behavior: dropped into the setup wizard.

UniFi db is in it's own container, and that mongo doesn't restart...

I see no evidence that any of the unifi data on disk changes during the recreate.

docker-compose.yml: https://gist.github.com/imajes/625d1be7e07938a3756603179b7ec979

requested info:

       % lsb_release -a   
       No LSB modules are available.
       Distributor ID:	Ubuntu
       Description:	Ubuntu 18.04.1 LTS
       Release:	18.04
       Codename:	bionic
  • Docker version:
       % docker --version
       Docker version 18.06.1-ce, build e68fc7a
       docker-compose version 1.20.1, build 5d8c71b
  • Labels from container:
    user@host:~$ docker inspect goofball222/unifi:<tagname>
    ...
            "Labels": {
                "org.label-schema.build-date": "2019-01-30T01:31:36Z",
                "org.label-schema.license": "Apache-2.0",
                "org.label-schema.name": "UniFi Controller",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.url": "https://github.com/goofball222/unifi",
                "org.label-schema.vcs-ref": "dc2932a",
                "org.label-schema.vcs-url": "https://github.com/goofball222/unifi.git",
                "org.label-schema.vendor": "The Goofball - [email protected]",
                "org.label-schema.version": "5.9.29"
            }
    ...

I've run out of ideas for how to further debug this. Any tips welcome.

unfi:5.13 - WPA3 test release

Since this is a testing release and as I understood a copy of the 5.12 version, I'd be interested in if there is any plan on implementing the following source as a 5.13 release:

https://community.ui.com/questions/FEATURE-WPA3-for-UniFi-Gen1-2-and-3-APs/cbb7d35e-2644-40a3-a2b8-db8a9c07d063

https://dl.ubnt-ut.com/teunis/wpa3/5.13.9/unifi_5.13.9-13440~pr-3517-1_ubuntu_sysvinit_all.deb

Needs an unifi account to access. For testing purposes in the provided files WPA3 is enabled and I hope there are many more users who'd like to test this new feature within their docker container without having to install it directly to machine.

Since you've released a 5.13 for testing, I'd reconsider if you want to keep the version number as provided.

Regards

No Unifi Cloud Access

I can login to my ubnt account and turn on cloud access in the Unifi dashboard, however when I go to login to my account I am unable to connect. By the looks of it the IP address for the docker container is being shared to ubnt instead of my WAN IP. Is there anyway this can be resolved so that I can connect via ubnt/app?

v5.11.10 Alpine build fails to start Tomcat server

Starting with v5.11.10 the Alpine build is broken, throws an error inside the UniFi Java process about starting Tomcat -

[2019-03-28T05:37:02,047] XXX <launcher> ERROR tomcat - Failed to start Tomcat
org.apache.catalina.LifecycleException: Failed to initialize component [StandardServer[-1]]
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:112) ~[tomcat-embed-core-8.5.34.jar:8.5.34]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140) ~[tomcat-embed-core-8.5.34.jar:8.5.34]
        at org.apache.catalina.startup.Tomcat.start(Tomcat.java:366) ~[tomcat-embed-core-8.5.34.jar:8.5.34]
        at com.ubnt.net.B.ö00000(Unknown Source) ~[ace.jar:?]
        at com.ubnt.net.B.afterPropertiesSet(Unknown Source) ~[ace.jar:?]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.resolveBeanReference(ConfigurationClassEnhancer.java:394) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:366) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b.tomcatServer(<generated>) ~[ace.jar:?]
        at com.ubnt.service.AppContext.dbMigrationService(Unknown Source) ~[ace.jar:?]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b.CGLIB$dbMigrationService$32(<generated>) ~[ace.jar:?]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b$$FastClassBySpringCGLIB$$b460132e.invoke(<generated>) ~[ace.jar:?]
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b.dbMigrationService(<generated>) ~[ace.jar:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_201]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_201]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_201]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:620) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:455) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.resolveBeanReference(ConfigurationClassEnhancer.java:394) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:366) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b.dbMigrationService(<generated>) ~[ace.jar:?]
        at com.ubnt.service.AppContext.dbService(Unknown Source) ~[ace.jar:?]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b.CGLIB$dbService$31(<generated>) ~[ace.jar:?]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b$$FastClassBySpringCGLIB$$b460132e.invoke(<generated>) ~[ace.jar:?]
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b.dbService(<generated>) ~[ace.jar:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_201]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_201]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_201]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:620) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:455) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.resolveBeanReference(ConfigurationClassEnhancer.java:394) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:366) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b.dbService(<generated>) ~[ace.jar:?]
        at com.ubnt.service.AppContext.configService(Unknown Source) ~[ace.jar:?]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b.CGLIB$configService$29(<generated>) ~[ace.jar:?]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b$$FastClassBySpringCGLIB$$b460132e.invoke(<generated>) ~[ace.jar:?]
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b.configService(<generated>) ~[ace.jar:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_201]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_201]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_201]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:620) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:455) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.resolveBeanReference(ConfigurationClassEnhancer.java:394) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:366) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b.configService(<generated>) ~[ace.jar:?]
        at com.ubnt.service.AppContext.autoOptimizer(Unknown Source) ~[ace.jar:?]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b.CGLIB$autoOptimizer$34(<generated>) ~[ace.jar:?]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b$$FastClassBySpringCGLIB$$b460132e.invoke(<generated>) ~[ace.jar:?]
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at com.ubnt.service.AppContext$$EnhancerBySpringCGLIB$$9bb5873b.autoOptimizer(<generated>) ~[ace.jar:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_201]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_201]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_201]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:620) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:455) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) [spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) [spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) [spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846) [spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863) [spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) [spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:88) [spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
        at com.ubnt.service.B.nullsuper(Unknown Source) [ace.jar:?]
        at com.ubnt.service.B.return(Unknown Source) [ace.jar:?]
        at com.ubnt.ace.Launcher.main(Unknown Source) [ace.jar:?]
Caused by: java.security.ProviderException: Could not initialize NSS
        at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:223) ~[sunpkcs11.jar:1.8.0_201]
        at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:103) ~[sunpkcs11.jar:1.8.0_201]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_201]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_201]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_201]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_201]
        at sun.security.jca.ProviderConfig$2.run(ProviderConfig.java:224) ~[?:1.8.0_201]
        at sun.security.jca.ProviderConfig$2.run(ProviderConfig.java:206) ~[?:1.8.0_201]
        at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_201]
        at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:206) ~[?:1.8.0_201]
        at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:187) ~[?:1.8.0_201]
        at sun.security.jca.ProviderList.loadAll(ProviderList.java:282) ~[?:1.8.0_201]
        at sun.security.jca.ProviderList.removeInvalid(ProviderList.java:299) ~[?:1.8.0_201]
        at sun.security.jca.Providers.getFullProviderList(Providers.java:173) ~[?:1.8.0_201]
        at java.security.Security.getProviders(Security.java:487) ~[?:1.8.0_201]
        at org.apache.catalina.core.JreMemoryLeakPreventionListener.lifecycleEvent(JreMemoryLeakPreventionListener.java:389) ~[tomcat-embed-core-8.5.34.jar:8.5.34]
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94) ~[tomcat-embed-core-8.5.34.jar:8.5.34]
        at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:395) ~[tomcat-embed-core-8.5.34.jar:8.5.34]
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106) ~[tomcat-embed-core-8.5.34.jar:8.5.34]
        ... 115 more
Caused by: java.io.FileNotFoundException: /usr/lib/libnss3.so
        at sun.security.pkcs11.Secmod.initialize(Secmod.java:193) ~[sunpkcs11.jar:1.8.0_201]
        at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:218) ~[sunpkcs11.jar:1.8.0_201]
        at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:103) ~[sunpkcs11.jar:1.8.0_201]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_201]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_201]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_201]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_201]
        at sun.security.jca.ProviderConfig$2.run(ProviderConfig.java:224) ~[?:1.8.0_201]
        at sun.security.jca.ProviderConfig$2.run(ProviderConfig.java:206) ~[?:1.8.0_201]
        at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_201]
        at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:206) ~[?:1.8.0_201]
        at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:187) ~[?:1.8.0_201]
        at sun.security.jca.ProviderList.loadAll(ProviderList.java:282) ~[?:1.8.0_201]
        at sun.security.jca.ProviderList.removeInvalid(ProviderList.java:299) ~[?:1.8.0_201]
        at sun.security.jca.Providers.getFullProviderList(Providers.java:173) ~[?:1.8.0_201]
        at java.security.Security.getProviders(Security.java:487) ~[?:1.8.0_201]
        at org.apache.catalina.core.JreMemoryLeakPreventionListener.lifecycleEvent(JreMemoryLeakPreventionListener.java:389) ~[tomcat-embed-core-8.5.34.jar:8.5.34]
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94) ~[tomcat-embed-core-8.5.34.jar:8.5.34]
        at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:395) ~[tomcat-embed-core-8.5.34.jar:8.5.34]
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106) ~[tomcat-embed-core-8.5.34.jar:8.5.34]
        ... 115 more
[2019-03-28T05:37:02,060] XXX <launcher> INFO  db     - waiting for db connection...

I'm not sure if this is a missing dependency in Alpine Linux, or something broken in the UniFi.Unix.zip "unsupported" installation method. Working on troubleshooting now. Created this issue report to track status.

Problem starting container

Hi,

First of all thanks for the awesome container.

I've been running the container without any problems for months but when i try to start it now i get the following error.

[2018-03-21 13:38:15,776] INFO - Entrypoint running with UID 0 (root)
[2018-03-21 13:38:15,782] INFO - UID/GID for unifi are unchanged: UID=999, GID=999
[2018-03-21 13:38:15,783] INFO - Ensuring file permissions are correct before dropping privs - 'chown -R unifi:unifi /usr/lib/unifi'
[2018-03-21 13:38:15,803] EXEC - --force as UID 0 (root)

Any ideas?

Best regards,
Peter

Can't login to Ubiquiti account from the setup wizard

Hello

I am trying to setup goofball222/unifi:latest-alpine on a synology (Docker version 18.09.8, build 2c0a67) as I would like to use a seperate docker container running mongodb.

This are my Environment Variables

When I start the container I see the following:

XXX INFO webrtc - Unable to load WebRTC library

However I am still able to access the UI on https://...:8443. But when asked for my Ubiquiti credentials I get an Invalid username or password, please try again. in return. However my credentials are fine for sure! Double and tripple checked on https://unifi.ui.com/. I have also ensured that I have a clean setup (meaning fresh mongo and unifi container, with empty mount points).

What is going on here?

[2019-12-04T23:06:51,237] XXX <webapi-2> WARN  api    - failed to authenticate to SSO: Cloud operation failed! RC=403, error: {"detail":"Invalid credential"}                                       
[2019-12-04T23:06:51,238] XXX <webapi-2> INFO  api    - [api] api.err.IncorrectUbicCreds: /api/cmd/cloudaccess     

Here the output of docker inspect goofball222/unifi:latest-alpine

"Labels": {
    "org.label-schema.build-date": "2019-11-26T15:45:10Z",
    "org.label-schema.license": "Apache-2.0",
    "org.label-schema.name": "UniFi Controller",
    "org.label-schema.schema-version": "1.0",
    "org.label-schema.url": "https://github.com/goofball222/unifi",
    "org.label-schema.vcs-ref": "dbc9685",
    "org.label-schema.vcs-url": "https://github.com/goofball222/unifi.git",
    "org.label-schema.vendor": "The Goofball - [email protected]",
    "org.label-schema.version": "5.12.35"
},

5.9 alpha builds?

Hello, would it be possible to add 5.9 alpha builds (5.9.6) to the unstable version? :)

Thanks

5.12 label not pushed to docker hub

@goofball222 looks like the 5.12 release lable isn't avail on dockerhub. ( i know you just did it, but in case somehow it's not in the job queue, here's an issue for it ;))

also, are you in the unifi discord?

JVM_EXTRA_OPTS need to be set to start

Hi,

I can't start the container. JVM_EXTRA_OPTS and JVM_INIT_HEAP_SIZE can't be unset
If I remove the variable container also doesn't start.
I can set JVM_INIT_HEAP_SIZE to 512M but what can I set for this parameter to start the container?

OS/distribution version: Synology DSM 6.2
Docker version: 17.05.0-0344
Labels from docker inspect goofball222/unifi:sc

Thanks
Rico

add tcpdump

you're image deleted all the apt/dpkg folders and files, making it impossible to install additional packages

root@unifi-controller-59985457c-zzjw6:/usr/lib/unifi# apt install tcpdump
Reading package lists... Error!
E: Could not open file /var/lib/dpkg/status - open (2: No such file or directory)
E: The package lists or status file could not be parsed or opened.
root@unifi-controller-59985457c-zzjw6:/usr/lib/unifi# apt update
Get:1 http://security.debian.org jessie/updates InRelease [44.9 kB]
Get:2 http://ftp.debian.org jessie-backports InRelease [166 kB]
Ign http://repo.mongodb.org jessie/mongodb-org/3.4 InRelease
Get:3 http://security.debian.org jessie/updates/main amd64 Packages [641 kB]
Get:4 http://repo.mongodb.org jessie/mongodb-org/3.4 Release.gpg [801 B]
Get:5 http://repo.mongodb.org jessie/mongodb-org/3.4 Release [2393 B]
Ign http://deb.debian.org jessie InRelease
Get:6 http://deb.debian.org jessie-updates InRelease [145 kB]
Get:7 http://repo.mongodb.org jessie/mongodb-org/3.4/main amd64 Packages [11.8 kB]
Get:8 http://ftp.debian.org jessie-backports/main amd64 Packages [1172 kB]
Get:9 http://deb.debian.org jessie Release.gpg [2420 B]
Get:10 http://deb.debian.org jessie Release [148 kB]
Get:11 http://deb.debian.org jessie-updates/main amd64 Packages [23.0 kB]
Get:12 http://deb.debian.org jessie/main amd64 Packages [9098 kB]
Fetched 11.5 MB in 7s (1577 kB/s)
Reading package lists... Error!
E: Could not open file /var/lib/dpkg/status - open (2: No such file or directory)
E: The package lists or status file could not be parsed or opened.

I'm having STUN errors and would like to debug inside the pod (running in kubernetes) but can't install tcpdump. Can you either add tcpdump to the image, or not delete /var/lib/dpkg/*?

Thanks

[Request] Provide SC also in testing

Hi

UniFi Controller version 5.11.38 is a release candidate.
From my point of view, it should also be avaiable as testing as long as there is no newer testing release. Otherwise people like me using this tag stuck on 5.11.36 because this was the last testing release. So I've always to switch between different tags to get the most recent version.

testing = most recent testing release or SC (release candidate) of the current testing cycle if there is no newer testing release
5.11-sc = all 5.11.x releases as release/stable candidate AND also public releases (if there is no more recent stable candidate) -> so it should also include the 5.11.x release at the end... otherwise people will stuck on 5.11.38 as release candidate also if there is 5.11.99 avaiable as a general release.

Is this possible?

WebSocket Connection error

Hi,

I know there use to be a bug with "websocket connection error", but as i could see on a changelog from Ubiquiti, they fixed it "long" ago.

I'm currently running goofball222/unifi:latest which is 5.10.21 (Build: atag_5.10.21_11661)
I currently mount these ports to the container:
0.0.0.0:6789->6789/tcp, 0.0.0.0:8443->8443/tcp, 0.0.0.0:8843->8843/tcp, 0.0.0.0:8880->8880/tcp, 0.0.0.0:3478->3478/udp, 0.0.0.0:8888->8888/tcp, 8080/tcp, 10001/udp

And running Mongo in a separated container.

Any idea how to fix this?

JVM_EXTRA_OPTS

Created a new Unifi docker image on my Synology wont let me Save and Launch the Docker image because it keeps asking me to enter information for the Environment variables: JVM_EXTRA_OPTS and JVM_INIT_HEAP_SIZE

Leaving both variables values empty is not allowed. Removing them and start the docker image result in Docker container: Unifi stopped unexpectedly. error.

Filling JVM_INIT_HEAP_SIZE with 512M also result in Docker container: Unifi stopped unexpectedly. error.

switching to docker-compose with separate mongo fails

So I'm attempting to take my system that's run with:

docker run \
    --name unifi \
    -d \
    --restart always \
    -p 3478:3478/udp \
    -p 6789:6789 \
    -p 8080:8080 \
    -p 8443:8443 \
    -p 8880:8880 \
    -p 8843:8843 \
    -p 10001:10001/udp \
    -v /var/lib/unifi/cert:/usr/lib/unifi/cert \
    -v /var/lib/unifi/data:/usr/lib/unifi/data \
    -v /var/lib/unifi/logs:/usr/lib/unifi/logs \
    -v /var/lib/unifi/supervisor:/var/log/supervisor \
    goofball222/unifi:release-5.8.30

to one started with Docker Compose. I'm attempting to get ahead of the coming changes to split out the mongo instance. The config I'm using is:

version: '3'

services:
  mongo:
    image: mongo:3.4
    container_name: unifidb
    restart: unless-stopped
    volumes:
      - /var/lib/unifi/data/db:/data/db

  unifi:
    image: goofball222/unifi:unifi58-debian-nomongo
    container_name: unifi
    restart: unless-stopped
    links:
      - mongo
    ports:
      - 3478:3478/udp
      - 6789:6789
      - 8080:8080
      - 8443:8443
      - 8880:8880
      - 8843:8843
      - 10001:10001/udp
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/lib/unifi/cert:/usr/lib/unifi/cert
      - /var/lib/unifi/data:/usr/lib/unifi/data
      - /var/lib/unifi/logs:/usr/lib/unifi/logs
    environment:
      - DB_MONGO_LOCAL=false
      - DB_MONGO_URI=mongodb://mongo:27017/unifi
      - STATDB_MONGO_URI=mongodb://mongo:27017/unifi_stat
      - TZ=America/Chicago
      - UNIFI_DB_NAME=unifi

I started with the recommended Docker Compose and changed the following:

  • adjusted the paths outside of the container to match where I have them
  • adjusted TZ (not sure if this is correct) but my system runs America/Chicago so I assume its got that inside the container currently.
  • uncommented out all the ports to map them in
  • pinned mongo to 3.4 due to the comments I've read in the Unifi forums about needing to stick to 3.4.x
  • pinned your container to unifi58-debian-nomongo since I believe that's the closest thing to what I was previously running

I'm starting everything with docker-compose -f unifi.yml up -d and this is is the log file I get from docker logs unifi:

[2018-09-22 18:29:57,758] <docker-entrypoint> INFO - Entrypoint script version 1.0.6
[2018-09-22 18:29:57,764] <docker-entrypoint> INFO - Entrypoint functions version 1.0.6
[2018-09-22 18:29:57,775] <docker-entrypoint> INFO - Entrypoint running with UID 0 (root)
[2018-09-22 18:29:57,796] <docker-entrypoint> INFO - GID/UID for unifi are unchanged: GID=999, UID=999
[2018-09-22 18:29:57,802] <docker-entrypoint> INFO - Checking system.properties setup for container
[2018-09-22 18:29:57,824] <docker-entrypoint> INFO - Existing '/usr/lib/unifi/data/system.properties' found, ensuring container mode options are enabled
[2018-09-22 18:29:57,852] <docker-entrypoint> WARN - Custom SSL: missing '/usr/lib/unifi/cert/privkey.pem'
[2018-09-22 18:29:57,866] <docker-entrypoint> WARN - Custom SSL: missing '/usr/lib/unifi/cert/fullchain.pem'
[2018-09-22 18:29:57,871] <docker-entrypoint> WARN - Custom SSL: certificate import was NOT performed
[2018-09-22 18:29:57,881] <docker-entrypoint> INFO - Ensuring permissions are correct before continuing - 'chown -R unifi:unifi /usr/lib/unifi'
[2018-09-22 18:29:57,886] <docker-entrypoint> INFO - Running recursive 'chown' on Docker overlay2 storage is **really** slow. This may take a bit.
[2018-09-22 18:29:58,179] <docker-entrypoint> INFO - Use gosu to drop privileges and start Java/UniFi as GID=999, UID=999
[2018-09-22 18:29:58,186] <docker-entrypoint> EXEC - gosu unifi:unifi /usr/bin/java  -Xmx1024M -Dunifi.datadir=/usr/lib/unifi/data -Dunifi.logdir=/usr/lib/unifi/logs -Dunifi.rundir=/usr/lib/unifi/run -Djava.awt.headless=true -Dfile.encoding=UTF-8 -jar /usr/lib/unifi/lib/ace.jar start
[2018-09-22 18:29:59,249] <launcher> INFO  system - ======================================================================
[2018-09-22 18:29:59,250] <launcher> INFO  system - UniFi 5.8.30 (build atag_5.8.30_11076 - release) is started
[2018-09-22 18:29:59,250] <launcher> INFO  system - ======================================================================
[2018-09-22 18:29:59,251] <launcher> INFO  system - BASE dir:/usr/lib/unifi
[2018-09-22 18:29:59,255] <launcher> INFO  system - Current System IP: 192.168.1.4
[2018-09-22 18:29:59,256] <launcher> INFO  system - Hostname: d345d02673c3
[2018-09-22 18:31:02,805] <generate-report> WARN  system - cannot update to version
java.lang.IllegalArgumentException
	at org.bson.types.ObjectId.isValid(ObjectId.java:92)
	at org.bson.types.ObjectId.parseHexString(ObjectId.java:549)
	at org.bson.types.ObjectId.<init>(ObjectId.java:240)
	at com.ubnt.service.B.OOoo.super(Unknown Source)
	at com.ubnt.service.N.A.Òo0000(Unknown Source)
	at com.ubnt.service.N.A.ÕÕ0000(Unknown Source)
	at com.ubnt.service.N.A.ØöO000(Unknown Source)
	at com.ubnt.service.N.A.privateprivate(Unknown Source)
	at com.ubnt.service.B.ooOO$2.run(Unknown Source)
	at com.ubnt.ace.ooOO$_O0.run(Unknown Source)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

I've tried the alpine image as well and get the same results. I'm sure its something obvious that I'm missing.

restoring backup file causes a bunch of exceptions

When i upgrade my docker, i lose the settings and have to restore a backup when i am doing this the following is seen in the docket logs

Unraid Server 6.7.2
Tag: tested all of them

org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: destroy called
Exception in thread "Thread-13" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: Initialization of bean failed; nested exception is java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:584)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1455)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1419)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1310)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1166)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:855)
at org.springframework.beans.factory.support.ConstructorResolver.resolvePreparedArguments(ConstructorResolver.java:802)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:143)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1143)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1455)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1419)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1310)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1166)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:855)
at org.springframework.beans.factory.support.ConstructorResolver.resolvePreparedArguments(ConstructorResolver.java:802)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:143)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1143)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.context.support.DefaultLifecycleProcessor.getLifecycleBeans(DefaultLifecycleProcessor.java:289)
at org.springframework.context.support.DefaultLifecycleProcessor.stopBeans(DefaultLifecycleProcessor.java:195)
at org.springframework.context.support.DefaultLifecycleProcessor.stop(DefaultLifecycleProcessor.java:116)
at org.springframework.context.support.AbstractApplicationContext.stop(AbstractApplicationContext.java:1331)
at com.ubnt.service.B.fornew(Unknown Source)
at com.ubnt.ace.Launcher$2.run(Unknown Source)
Caused by: java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
at org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:177)
at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1212)
at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:340)
at org.springframework.web.servlet.handler.AbstractHandlerMapping.detectMappedInterceptors(AbstractHandlerMapping.java:318)
at org.springframework.web.servlet.handler.AbstractHandlerMapping.initApplicationContext(AbstractHandlerMapping.java:293)
at org.springframework.context.support.ApplicationObjectSupport.initApplicationContext(ApplicationObjectSupport.java:124)
at org.springframework.web.context.support.WebApplicationObjectSupport.initApplicationContext(WebApplicationObjectSupport.java:77)
at org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(ApplicationObjectSupport.java:78)
at org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:120)
at org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:96)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:419)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1737)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
... 45 more

Add new Stable Candidate tag for 5.9

Can you add a new sc59 tag for the newest 5.9.20 stable candidate? I only suggested the tag sc59 since I know there is also a stable candidate version currently sitting at 5.8.28, and I noticed you were tracking the 5.8.x builds with the sc tag.

Here's the release notes for 5.9.20: https://community.ubnt.com/t5/UniFi-Beta-Blog/UniFi-SDN-Controller-5-9-20-Stable-Candidate-has-been-released/ba-p/2443623

Release notes for 5.8.28: https://community.ubnt.com/t5/UniFi-Beta-Blog/UniFi-SDN-Controller-5-8-28-Stable-Candidate-has-been-released/ba-p/2443775

Problem after upgrading to Fedora 30

Details below. Upgraded to Fedora 30. Container starts / shows healthy, but web admin doesn't come up.

Server log:

[2019-05-01 08:54:07,512] <docker-entrypoint> INFO - Entrypoint script version 1.0.7
[2019-05-01 08:54:07,635] <docker-entrypoint> INFO - Entrypoint functions version 1.0.7
[2019-05-01 08:54:08,042] <docker-entrypoint> INFO - Entrypoint running with UID 0 (root)
[2019-05-01 08:54:08,049] <docker-entrypoint> INFO - UNIFI_GID is set. Please use the updated PGID variable. Automatically converting to PGID.
[2019-05-01 08:54:08,053] <docker-entrypoint> INFO - UNIFI_UID is set. Please use the updated PUID variable. Automatically converting to PUID.
[2019-05-01 08:54:08,057] <docker-entrypoint> INFO - Setting custom unifi GID/UID: GID=985, UID=1000
[2019-05-01 08:54:12,648] <docker-entrypoint> WARN - ======================================================================
[2019-05-01 08:54:12,649] <docker-entrypoint> WARN - One or more of: 'DB_MONGO_LOCAL', 'DB_MONGO_URI', 'STATDB_MONGO_URI', or 'UNIFI_DB_NAME' is unset.
[2019-05-01 08:54:12,651] <docker-entrypoint> WARN - In the future you should consider running UniFi on Docker with an external Mongo DB instance defined.
[2019-05-01 08:54:12,652] <docker-entrypoint> WARN - *** Please check the README.md and examples at https://github.com/goofball222/unifi ***
[2019-05-01 08:54:12,653] <docker-entrypoint> WARN - ======================================================================
[2019-05-01 08:54:12,654] <docker-entrypoint> INFO - Checking system.properties setup for container
[2019-05-01 08:54:12,655] <docker-entrypoint> INFO - Existing '/usr/lib/unifi/data/system.properties' found, ensuring container mode options are enabled
[2019-05-01 08:54:12,986] <docker-entrypoint> WARN - Custom SSL: missing '/usr/lib/unifi/cert/privkey.pem'
[2019-05-01 08:54:12,988] <docker-entrypoint> WARN - Custom SSL: missing '/usr/lib/unifi/cert/fullchain.pem'
[2019-05-01 08:54:12,989] <docker-entrypoint> WARN - Custom SSL: certificate import was NOT performed
[2019-05-01 08:54:13,078] <docker-entrypoint> INFO - Ensuring permissions are correct before continuing - 'chown -R unifi:unifi /usr/lib/unifi'
[2019-05-01 08:54:13,079] <docker-entrypoint> INFO - Running recursive 'chown' on Docker overlay2 storage is **really** slow. This may take a bit.
[2019-05-01 09:03:44,911] <docker-entrypoint> INFO - Use gosu to drop privileges and start Java/UniFi as GID=985, UID=1000
[2019-05-01 09:03:44,973] <docker-entrypoint> EXEC - gosu unifi:unifi /usr/bin/java  -Xmx1024M -Dunifi.datadir=/usr/lib/unifi/data -Dunifi.logdir=/usr/lib/unifi/logs -Dunifi.rundir=/usr/lib/unifi/run -Djava.awt.headless=true -Dfile.encoding=UTF-8 -jar /usr/lib/unifi/lib/ace.jar start

Compose entry:

   unifi:
     container_name: unifi
     image: goofball222/unifi:latest
     hostname: unifi
     volumes:
       - ${DATA}/unifi/data:/usr/lib/unifi/data
       - ${DATA}/unifi/logs:/usr/lib/unifi/logs
       - ${DATA}/unifi/cert:/usr/lib/unifi/cert
     environment:
       - UNIFI_GID=985
       - UNIFI_UID=1000
       - TZ
     ports:
       - 3478:3478/udp
       - 10001:10001/udp
       - 6789:6789/tcp
       - 8080:8080/tcp
       - 8081:8081/tcp
       - 8880:8880/tcp
       - 8443:8443/tcp
       - 8843:8843/tcp
     labels:
       traefik.enable: true
       traefik.tags: frontend
       traefik.frontend.passHostHeader: true
       traefik.admin.backend: unifi
       traefik.admin.frontend.rule: Host:unifi.${DOMAIN}
       traefik.admin.port: 8443
       traefik.admin.protocol: https
       traefik.frontend.headers.SSLRedirect: true
       traefik.frontend.headers.STSSeconds: 315360000
       traefik.frontend.headers.browserXSSFilter: true
       traefik.frontend.headers.contentTypeNosniff: true
       traefik.frontend.headers.forceSTSHeader: true
       traefik.frontend.headers.SSLHost: ${DOMAIN}
       traefik.frontend.headers.STSIncludeSubdomains: true
       traefik.frontend.headers.STSPreload: true
       traefik.frontend.headers.frameDeny: true
       com.ouroboros.enable: "true"
     restart: unless-stopped
     networks:
        - newnet
  • Please provide the following information:
LSB Version:    :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: Fedora
Description:    Fedora release 30 (Thirty)
Release:        30
Codename:       Thirty
* Docker version:
Docker version 17.05.0-ce, build 89658be
* Labels from container:
            "Labels": {
                "org.label-schema.build-date": "2019-04-27T17:00:34Z",
                "org.label-schema.license": "Apache-2.0",
                "org.label-schema.name": "UniFi Controller",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.url": "https://github.com/goofball222/unifi",
                "org.label-schema.vcs-ref": "2b98555",
                "org.label-schema.vcs-url": "https://github.com/goofball222/unifi.git",
                "org.label-schema.vendor": "The Goofball - [email protected]",
                "org.label-schema.version": "5.10.21"
            }

5.9.32 (sc) doesnt seem to work

Just downloaded your 5.9.32 (sc) version, doesn't seem to work. Unifi controller starts up, but then dies right away. judging by the forums, it could be the version of JDK you have (171) they recommend something like 191. can't get it to work, and i foolishly didn't back up my folder before trying this, so i can't roll back now.

Going back to earlier version

Not getting a container error but was working with Unifi support while trying to get 2 addition AP to show up so I could adopt them into my unifi. The APs I have are not new and are no longer supported. But the 3 I have work fine. I wanted to add 2 more of the same model but they do now show up for adoption. While working with unifi support I was told that 5.6.40 was the last version that supported my APs. So I would like to try that version. I pulled release-5.6.40 down and I'd like to give it a shot. My issue or question is... Is there any back compatibility issues I should be considering. I would like to NOT break the current configuration.

Unifi 5.11-sc always restarting on docker/raspberrpi 4

Hey goofball,

I'm running a fresh installed Hypriot OS on my raspberry with docker / portainer.
The realy first container I wanted to start with was/is your image for 5.11.39 :)

Maybe it is just not compatible with ARM7?

I get this error in the logfiles:

# docker logs --tail 50 --follow --timestamps unifi 2019-08-24T15:36:27.728186585Z standard_init_linux.go:211: exec user process caused "exec format error"

grafik

grafik

grafik

grafik

grafik

grafik

Guest portal preview broken

OS/distribution version (command for your OS may differ): Ubuntu Server 18.04LTS
Docker version 18.09.0, build 4d60db4
Labels from container: goofball222/unifi:latest and goofball222/unifi:unifi56

Guest portal preview is broken both in Chrome and Firefox. According to some threads in the official Ubiquiti forums, it could have to do with the version of Java included in the docker image. Could it be that Java 8u151 included?

https://community.ubnt.com/t5/UniFi-Wireless/Guest-Portal-Preview/td-p/1699481
https://community.ubnt.com/t5/UniFi-Wireless/Desktop-Preview-of-Guest-Portal-Broken/td-p/2201034

Local ports conflicts with other ports used by other services

Since the new version i can't start the Docker container anymore on my Synology and gives "Local ports port {unify port numbers} conflicts with other ports used by other services.
I dont use Automatic port mapping, but map 10001 to 10001, 3478 to 3478, etc but now this doesn't work anymore.

Remote syslog Server -> Log to this controller

Hello,

i have an issue with my local unifi network and the support asked me to provide support logs. they guided my to activate the syslog stuff and also the option to log to this controller.

image

when downloading the Supportfiles using the GUI no syslog events are in the log. also the directory where the syslog files should be logged is empty.

is there something to open (port) or configure (image/container) to make the syslog stuff working?

thank you alot

STUN service only binds to IPv6 when IPv6 exists in container

OS/distribution version (command for your OS may differ):

Synology NAS, Diskstation Manager OS (linux)

Docker version:

Docker version 17.05.0-ce, build 9f07f0e-synology

Labels from container:

```json
        "Labels": {
            "org.label-schema.build-date": "2018-07-24T17:49:13Z",
            "org.label-schema.license": "Apache-2.0",
            "org.label-schema.name": "UniFi Controller",
            "org.label-schema.schema-version": "1.0",
            "org.label-schema.url": "https://github.com/goofball222/unifi",
            "org.label-schema.vcs-ref": "50081dd",
            "org.label-schema.vcs-url": "https://github.com/goofball222/unifi.git",
            "org.label-schema.vendor": "The Goofball - [email protected]",
            "org.label-schema.version": "5.8.25-34502471b9"
        }
```

Details on how to reproduce the trouble, if available:

  • Container is running in host networking mode, no NAT.
host# netstat -an |grep 3478
udp6       0      0 :::3478                 :::*
  • The following workaround to disable IPv6 on the JVM resolves the issue, the STUN service properly binds to the IPv4 interface: JVM_EXTRA_OPTS='-Djava.net.preferIPv4Stack=true'
host# netstat -an |grep 3478
udp        0      0 0.0.0.0:3478            0.0.0.0:*

Refactor Dockerfile to reuse layer

Have you considered moving:

  dpkg --install unifi_sysvinit_all.deb && \
  rm unifi_sysvinit_all.deb && \

To another RUN block after the other?

Doing that would make the first layer reusable between builds and versions. That would minimize disk usage if we have more than one version and it will reduce pull time on upgrades.

The downside is apt-get -y autoremove wget wouldn't help reduce size and as such the final size might be a couple MB larger.

ARM Support?

Trying to run this on a RPi 3 running Stretch gives:

standard_init_linux.go:190: exec user process caused "exec format error"

Are there any plans to support armhf builds?

Thanks in advance

UniFI Video image

Hey,

Have you considered to make an automated build for Unifi Video?

goofball222/unifi:sc 5.9.24 - Restart loop

Synology NAS running DSM 6.2-23739 Update 2
* Docker version: 17.05.0-0379

The container goes into a restart loop when trying to run it. Reverted to previous sc-release and it starts correctly again.

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.