QNAP docker-compose 與環境檔案求助

您好。我正在嘗試使用 Container Station 來運行 LibreNMS。透過論壇上一位用戶的幫助,我了解到需要使用「應用程式」來輸入 docker-compose.yml 文件資訊。我打算使用這個範例,因為我在公司 Ubuntu 虛擬機上成功用過:docker/examples/compose at master · librenms/docker · GitHub

這個範例要求在 docker-compose.yml 同一目錄下有兩個變數檔案。我想知道在 Container Station 裡是否有辦法做到這點?我需要在這個 GitHub 資料夾中建立 .env 和 librenms.env 檔案。

我也嘗試過這裡的程式碼,但資料庫還是沒正確設定,使用時會出現資料庫錯誤:docker-librenms/docker-compose.yml at master · jarischaefer/docker-librenms · GitHub

錯誤訊息如下:ERROR: DB_HOST must be defined

你可以貼出你使用過的 compose(當然可以移除任何用過的密碼,或直接用佔位符替換)。

name: librenms

services:
  db:
    image: mariadb:10
    container_name: librenms_db
    command:
      - "mysqld"
      - "--innodb-file-per-table=1"
      - "--lower-case-table-names=1"
      - "--character-set-server=utf8mb4"
      - "--collation-server=utf8mb4_unicode_ci"
    volumes:
      - "./db:/var/lib/mysql"
    environment:
      - "TZ=${TZ}"
      - "MARIADB_RANDOM_ROOT_PASSWORD=yes"
      - "MYSQL_DATABASE=${MYSQL_DATABASE}"
      - "MYSQL_USER=${MYSQL_USER}"
      - "MYSQL_PASSWORD=${MYSQL_PASSWORD}"
    restart: always

  redis:
    image: redis:7.2-alpine
    container_name: librenms_redis
    environment:
      - "TZ=${TZ}"
    restart: always

  msmtpd:
    image: crazymax/msmtpd:latest
    container_name: librenms_msmtpd
    env_file:
      - "./msmtpd.env"
    restart: always

  librenms:
    image: librenms/librenms:latest
    container_name: librenms
    hostname: librenms
    cap_add:
      - NET_ADMIN
      - NET_RAW
    ports:
      - target: 8000
        published: 8000
        protocol: tcp
    depends_on:
      - db
      - redis
      #- msmtpd
    volumes:
      - "./librenms:/data"
    env_file:
      - "./librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
    restart: always

  dispatcher:
    image: librenms/librenms:latest
    container_name: librenms_dispatcher
    hostname: librenms-dispatcher
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    volumes:
      - "./librenms:/data"
    env_file:
      - "./librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
      - "DISPATCHER_NODE_ID=dispatcher1"
      - "SIDECAR_DISPATCHER=1"
    restart: always

  syslogng:
    image: librenms/librenms:latest
    container_name: librenms_syslogng
    hostname: librenms-syslogng
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    ports:
      - target: 514
        published: 514
        protocol: tcp
      - target: 514
        published: 514
        protocol: udp
    volumes:
      - "./librenms:/data"
    env_file:
      - "./librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
      - "SIDECAR_SYSLOGNG=1"
    restart: always

  snmptrapd:
    image: librenms/librenms:latest
    container_name: librenms_snmptrapd
    hostname: librenms-snmptrapd
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    ports:
      - target: 162
        published: 162
        protocol: tcp
      - target: 162
        published: 162
        protocol: udp
    volumes:
      - "./librenms:/data"
    env_file:
      - "./librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
      - "SIDECAR_SNMPTRAPD=1"
    restart: always

我會先簡化……使用這裡的 YAML 檔案

只要把埠口改掉,避免阻擋你的 QNAP GUI

version: '3.9'

services:
  web:
    image: jarischaefer/docker-librenms
    hostname: librenms
    ports:
      - "8000:80"
    volumes:
      - ./docker-persistence/logs:/opt/librenms/logs
      - ./docker-persistence/rrd:/opt/librenms/rrd
    environment:
      - APP_KEY=base64:7cVDlhFEZ1dyxIuP38Yy72YuXrcGg1ISwAwZ2dKt4Pk=
      - DB_HOST=db
      - DB_NAME=librenms
      - DB_USER=librenms
      - DB_PASS=librenms
      - POLLERS=16
      - BASE_URL=http://localhost
      - DAILY_ON_STARTUP=true
    links:
      - mysql:db
    depends_on:
      mysql:
        condition: service_healthy
  mysql:
    image: mysql:8.0
    command: --sql-mode=""
    ports:
      - "3306"
    volumes:
      - ./docker-persistence/mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_USER=librenms
      - MYSQL_PASSWORD=librenms
      - MYSQL_DATABASE=librenms
    healthcheck:
      test: "mysql -h localhost -u root -p$$MYSQL_ROOT_PASSWORD -e 'USE librenms'"
      interval: 5s
      timeout: 5s
      retries: 20

當這個最小化版本可以運作後,你就可以再加上其他選項來擴充

你無法在 Container Station(圖形介面)中完成你想做的事。你可以直接將環境變數的值硬編碼到你的 docker compose 腳本中(如上面其他人建議的),或者你可以從命令列執行這些操作。透過 SSH 連線到你的 QNAP,在你的家目錄中建立一個資料夾,然後在裡面建立 docker-compose.yaml 檔案,以及一個 .env 檔案來定義你的環境變數。接著你可以使用 docker compose -p your-project-name up -d 來部署。很簡單。

對我來說很遺憾無法運作:

未知的旗標:--project-name

儘管 docker compose help 明確指出這是一個有效的旗標。