Help Needed: Xibo CMS Docker Install on OMV 7 / Portainer - CMS Can't Connect to MySQL

Hi Xibo Community!

I’m excited to get Xibo CMS running for my project, but I’ve hit a snag during the Docker installation on my setup and could really use your expertise.

My Environment:

  • Hardware: N100 Mini PC

  • OS: OpenMediaVault 7.7

  • Orchestration: Portainer (running on OMV)

  • Xibo Version Goal: xibosignage/xibo-cms:latest

What I’m Trying to Do:

Install Xibo CMS using Docker Compose managed via Portainer on my OMV server. I’m relatively new to Linux and Docker (please bear with me!), and I’ve been using AI assistance to help generate the configuration, so apologies if anything looks unconventional.

Steps Taken:
Prepared Host Directories: I created the necessary directories on my OMV data drive and appdata location

mkdir -p /appdata/xibo/mysql
mkdir -p /appdata/xibo/cms

mkdir -p /srv/dev-disk-by-uuid-ea663a92-5827-4edc-95c5-1945992758a3/data/xibo/library
mkdir -p /srv/dev-disk-by-uuid-ea663a92-5827-4edc-95c5-1945992758a3/data/xibo/backup
mkdir -p /srv/dev-disk-by-uuid-ea663a92-5827-4edc-95c5-1945992758a3/data/xibo/web/theme/custom
mkdir -p /srv/dev-disk-by-uuid-ea663a92-5827-4edc-95c5-1945992758a3/data/xibo/web/userscripts

chown -R 1000:100 /appdata/xibo
chown -R 1000:100 /srv/dev-disk-by-uuid-ea663a92-5827-4edc-95c5-1945992758a3/data/xibo

Created Docker Compose Stack in Portainer: Here is the stack configuration I used (comments translated to English, placeholders noted):

version: "3.3" # Of gebruik "3.7" of "3.8" als je OMV/Docker dat ondersteunt

services:
  cms-db:
    image: mysql:8.0
    container_name: xibo-mysql
    volumes:
      - /appdata/xibo/mysql:/var/lib/mysql # Host map voor MySQL data
    environment:
      MYSQL_ROOT_PASSWORD: "VUL_HIER_EEN_STERK_MYSQL_ROOT_WACHTWOORD_IN" # VERANDER DIT!
      MYSQL_DATABASE: "cms"
      MYSQL_USER: "cms"
      MYSQL_PASSWORD: "VUL_HIER_EEN_STERK_MYSQL_CMS_USER_WACHTWOORD_IN" # VERANDER DIT!
    restart: unless-stopped
    networks:
      - xibo-net
    # Optioneel: Geheugenlimiet voor MySQL, pas aan indien nodig
    # mem_limit: 1g

  cms-xmr:
    image: xibosignage/xibo-xmr:0.9
    container_name: xibo-xmr
    ports:
      - "9505:9505" # Poort voor XMR communicatie (HOST:CONTAINER)
    restart: unless-stopped
    networks:
      - xibo-net
    # Optioneel: Geheugenlimiet voor XMR
    # mem_limit: 256m

  cms-web:
    image: xibosignage/xibo-cms:release-v4.0.10 # Gebruik de laatste stabiele v4, of check Docker Hub voor nieuwere versies
    container_name: xibo-cms
    ports:
      - "8081:80" # HOST poort : CONTAINER poort. Pas '8081' aan indien nodig.
    volumes:
      # Host mappen die we in Stap 1 hebben aangemaakt:
      - /srv/dev-disk-by-uuid-ea663a92-5827-4edc-95c5-1945992758a3/data/xibo/library:/var/www/cms/library
      - /srv/dev-disk-by-uuid-ea663a92-5827-4edc-95c5-1945992758a3/data/xibo/backup:/var/www/cms/backup
      - /srv/dev-disk-by-uuid-ea663a92-5827-4edc-95c5-1945992758a3/data/xibo/web/theme/custom:/var/www/cms/web/theme/custom
      - /srv/dev-disk-by-uuid-ea663a92-5827-4edc-95c5-1945992758a3/data/xibo/web/userscripts:/var/www/cms/web/userscripts
      # Configuratie bestand (wordt deels door Xibo zelf beheerd na eerste start)
      - /appdata/xibo/cms/settings.php:/var/www/cms/settings.php
    environment:
      # MySQL Connectie Details (moeten overeenkomen met cms-db service)
      CMS_DB_HOST: "cms-db" # Naam van de database service
      CMS_DB_PORT: "3306"
      CMS_DB_NAME: "cms" # Naam van de database
      CMS_DB_USER: "cms" # Gebruiker voor de database
      CMS_DB_PASSWORD: "VUL_HIER_HETZELFDE_MYSQL_CMS_USER_WACHTWOORD_IN" # VERANDER DIT! (Hetzelfde als bij cms-db)

      # XMR Configuratie (essentieel voor player communicatie)
      XMR_HOST: "cms-xmr" # Naam van de XMR service
      CMS_XMR_PRIVATE_ADDRESS: "tcp://cms-xmr:9505" # Intern adres voor CMS -> XMR
      CMS_XMR_PUBLIC_ADDRESS: "tcp://192.168.11.206:9505" # Extern adres voor Players -> XMR (gebruik je OMV IP!)

      # Optioneel: Mail server configuratie (als je e-mails wilt versturen vanuit Xibo)
      # CMS_SMTP_SERVER: "smtp.example.com:587"
      # CMS_SMTP_USERNAME: "user@example.com"
      # CMS_SMTP_PASSWORD: "password"
      # CMS_SMTP_USE_TLS: "YES"
      # CMS_SMTP_USE_STARTTLS: "YES"
      # CMS_SMTP_HOSTNAME: "example.com" # The hostname to use in HELO command
      # CMS_EMAIL_FROM: "xibo@example.com"
      # CMS_EMAIL_ALERT: "alert@example.com" # Where to send system alerts
      # XIBO_TRUSTED_PROXIES: "ip_of_your_reverse_proxy_if_you_use_one"

      # Let op: PUID/PGID worden meestal NIET gebruikt door officiële Xibo images.
      # De permissies op de host mappen die we in Stap 1 hebben gezet zijn hier leidend.
    restart: unless-stopped
    depends_on:
      - cms-db
      - cms-xmr
    networks:
      - xibo-net
    # Optioneel: Geheugenlimiet voor CMS, Xibo kan veel geheugen gebruiken
    # mem_limit: 2g

networks:
  xibo-net:
    driver: bridge # Standaard bridge netwerk is meestal prima

The Problem:

The stack partially deploys, but the xibo-cms container fails to connect to the database:

  1. MySQL (cms-db) Container: Logs show it starts up, initializes the database, creates the cms user and database, and eventually reports ready for connections. (See relevant log snippet below).

  2. XMR (cms-xmr) Container: Starts, but logs show No log line matching the ‘’ filter. I assume this might be normal until the CMS is fully up?

  3. CMS (cms-web) Container: This is where it fails. The logs repeatedly show Waiting for MySQL to start - max 300 seconds and it never seems to successfully connect, even though the cms-db container logs indicate MySQL is running. Eventually, the container may stop or stay in a restart loop. I cannot access the Xibo web UI on http://<OMV_IP>:8081.

Relevant Logs:

Xibo-cms log

Waiting for MySQL to start - max 300 seconds

xibo-mysql Log Snippet (showing successful startup):

2025-04-22 18:04:46+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.42-1.el9 started.
2025-04-22 18:04:46+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2025-04-22 18:04:46+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.42-1.el9 started.
2025-04-22 18:04:46+00:00 [Note] [Entrypoint]: Initializing database files
2025-04-22T18:04:46.672715Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
2025-04-22T18:04:46.672795Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.42) initializing of server in progress as process 82
2025-04-22T18:04:46.681130Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-04-22T18:04:47.096200Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-04-22T18:04:48.256163Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2025-04-22 18:04:50+00:00 [Note] [Entrypoint]: Database files initialized
2025-04-22 18:04:50+00:00 [Note] [Entrypoint]: Starting temporary server
2025-04-22T18:04:50.504510Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
2025-04-22T18:04:50.506162Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.42) starting as process 126
2025-04-22T18:04:50.521567Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-04-22T18:04:50.682303Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-04-22T18:04:50.857916Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2025-04-22T18:04:50.857946Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2025-04-22T18:04:50.859809Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2025-04-22T18:04:50.876114Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
2025-04-22T18:04:50.876171Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.42'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  MySQL Community Server - GPL.
2025-04-22 18:04:50+00:00 [Note] [Entrypoint]: Temporary server started.
'/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
2025-04-22 18:04:52+00:00 [Note] [Entrypoint]: Creating database cms
2025-04-22 18:04:52+00:00 [Note] [Entrypoint]: Creating user cms
2025-04-22 18:04:52+00:00 [Note] [Entrypoint]: Giving user cms access to schema cms
2025-04-22 18:04:52+00:00 [Note] [Entrypoint]: Stopping temporary server
2025-04-22T18:04:52.538720Z 13 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.42).
2025-04-22T18:04:53.487165Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.42)  MySQL Community Server - GPL.
2025-04-22 18:04:53+00:00 [Note] [Entrypoint]: Temporary server stopped
2025-04-22 18:04:53+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
2025-04-22T18:04:53.774504Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
2025-04-22T18:04:53.775720Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.42) starting as process 1
2025-04-22T18:04:53.780476Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-04-22T18:04:53.931654Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-04-22T18:04:54.135013Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2025-04-22T18:04:54.135048Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2025-04-22T18:04:54.137182Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2025-04-22T18:04:54.154242Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2025-04-22T18:04:54.154330Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.42'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.

I tried restarting it but it doesn’t work…

My Questions:

  1. Could this be a Docker networking issue specific to OMV/Portainer that I’m missing?

  2. Are the permissions 1000:100 (user:users) appropriate for the Xibo volumes on OMV, or could this be causing the CMS container trouble (even if MySQL seems okay)?

  3. Is there anything obviously wrong with my Docker Compose structure or environment variables?

  4. Are there any other specific logs within the containers I should check?

I feel like I’m close but missing something fundamental. Any insights or suggestions would be incredibly helpful!

Thanks in advance for your time and expertise!