在docker compose中使用mosquitto-go-auth错误

问题描述 投票:0回答:1

我已经在 ubuntu 虚拟系统上设置了 mosquitto-go-auth。我开始尝试将我创建的系统转移到docker compose。 我从 Ubuntu 系统复制了我的文件,复制了配置。

mosquitto.conf:

persistence true
persistence_location /var/lib/mosquitto/

# log info:
log_dest file /mosquitto/log/mosquitto.log

# auth:
allow_anonymous false
listener 1883
auth_plugin /mosquitto/config/go-auth.so
auth_opt_log_level debug
require_certificate false

# postgress options:
auth_opt_backends postgres
auth_opt_pg_host postgres
auth_opt_pg_port 5432
auth_opt_pg_dbname API
auth_opt_pg_user mqtt_user
auth_opt_pg_password mqtt_pass

# hash options:
auth_opt_pg_hasher bcrypt
auth_opt_pg_hasher_salt_size 16           # salt bytes length


# ssl
auth_opt_pg_sslmode disable

# auth options
auth_opt_pg_connect_tries 5
auth_opt_pg_userquery select password from MqttUser where login = $1 limit 1
auth_opt_pg_superquery select count(*) from test_user where username = $1 and is_admin = true

这是我的码头工人撰写:

version: "3.9"
services:
  postgres:
    container_name: postgres_container
    image: postgres:14.8-alpine3.18
    command:
      - "postgres"
      - "-c"
      - "max_connections=50"
      - "-c"
      - "shared_buffers=1GB"
      - "-c"
      - "effective_cache_size=4GB"
      - "-c"
      - "work_mem=16MB"
      - "-c"
      - "maintenance_work_mem=512MB"
      - "-c"
      - "random_page_cost=1.1"
      - "-c"
      - "temp_file_limit=10GB"
      - "-c"
      - "log_min_duration_statement=200ms"
      - "-c"
      - "idle_in_transaction_session_timeout=10s"
      - "-c"
      - "lock_timeout=1s"
      - "-c"
      - "statement_timeout=60s"
      - "-c"
      - "shared_preload_libraries=pg_stat_statements"
      - "-c"
      - "pg_stat_statements.max=10000"
      - "-c"
      - "pg_stat_statements.track=all"
    environment:
      POSTGRES_DB: ${DATABASE_NAME}
      POSTGRES_USER: ${DATABASE_USER}
      POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
      PGDATA: "/var/lib/postgresql/data/pgdata"
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
      - ../2. Init Database:/docker-entrypoint-initdb.d
      - ./mosquitto/init-mqtt-auth-db.sh:/docker-entrypoint-initdb.d/init-mqtt-auth-db.sh
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DATABASE_USER} -d ${DATABASE_NAME}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 4G
    networks:
      - postgres

  pgadmin:
    container_name: pgadmin_container
    image: dpage/pgadmin4:7.2
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PG_DEFAULT_EMAIL}
      PGADMIN_DEFAULT_PASSWORD: ${PG_DEFAULT_ADMIN_PASSWORD}
      PGADMIN_CONFIG_SERVER_MODE: "False"
    volumes:
      - pgadmin-data:/var/lib/pgadmin
    ports:
      - "5050:80"
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 1G
    networks:
      - postgres

  mqtt-broker:
    image: eclipse-mosquitto:2.0.18
    user: mosquitto
    volumes:
      - ./mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf
      - ./mosquitto/config/go-auth.so:/mosquitto/config/go-auth.so
      - ./mosquitto/log/mosquitto.log:/mosquitto/log/mosquitto.log
      - data:/mosquitto/data
    ports:
      - target: 1883
        published: 1883
        protocol: tcp
        mode: host
      - target: 9001
        published: 9001
        protocol: tcp
        mode: host
    networks:
      - mqtt-net

volumes:
  postgres-data:
  pgadmin-data:
  data:
    name: "mqtt-broker-data"

networks:
  postgres:
    driver: bridge

  mqtt-net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.100.10.0/24

  postgres-data:

尝试启动 docker compose up 时。 我收到此错误:

Config loaded from /mosquitto/config/mosquitto.conf.
Loading plugin: /mosquitto/config/go-auth.so
Error: Unable to load auth plugin "/mosquitto/config/go-auth.so".
Load error: Error relocating /mosquitto/config/go-auth.so: __fprintf_chk: symbol not found

我认为原因是缺少安装golang。但我不知道如何在我的 docker compose 中安装它。

请帮助我在我的 docker compose 中设置 mosquitto-go-auth 的使用

docker docker-compose mqtt
1个回答
0
投票

这里最好的解决方案是将 eclipse mosquitto 容器替换为 mosquitto-go-auth 插件项目中的容器。

在基于 glibc 的平台(例如 Ubuntu)上构建的预构建和任何二进制文件不太可能在基于 Muscl Alpine 的 eclipse mosquitto 容器上运行。

请注意,更新 Docker-compose.yml 中卷的安装位置时,配置文件的某些路径将会更改。

© www.soinside.com 2019 - 2024. All rights reserved.