You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure中Docker Compose部署SteVe OCPP服务无法连接数据库如何解决?

故障排查与解决

核心原因

你本地Docker环境支持已废弃的links配置项,所以"db:mariadb"的主机别名可以正常生效。但Azure ACI的Docker Compose实现完全不支持links参数,导致web容器无法解析mariadb主机名,出现你看到的DNS查询失败报错。

修复方案

方案1:适配镜像默认配置(改动最小)

直接将数据库服务名改为mariadb,无需修改镜像内部的数据库连接参数,修改后的Docker Compose配置如下:

version: "3.0"

volumes:
  db-data:
    external: false

services:
  mariadb:
    image: mariadb:10.4
    ports:
      - 3306:3306
    volumes:
      - db-data:/var/lib/mysql
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
      MYSQL_DATABASE: stevedb
      MYSQL_USER: steve
      MYSQL_PASSWORD: changeme
  web:
    image: rainmakers/steve:latest
    ports:
      - 8180:8180
      - 8443:8443
    depends_on:
      - mariadb
    environment:
      MYSQL_PASSWORD: changeme

方案2:显式指定数据库主机地址

如果不想改动数据库服务名,可通过环境变量覆盖web服务的默认数据库连接地址,修改web服务配置即可:

web:
    image: rainmakers/steve:latest
    ports:
      - 8180:8180
      - 8443:8443
    depends_on:
      - db
    environment:
      # 显式指定数据库主机为db服务名
      DB_HOST: db
      MYSQL_PASSWORD: changeme

额外注意事项

  • ACI中同个Docker Compose部署的所有服务,默认可以直接用服务名作为主机名互相访问,不需要额外配置
  • depends_on仅控制容器启动顺序,不会等待数据库进程完全就绪,若修改后仍偶现连接失败,可给web服务添加启动等待逻辑,等3306端口可访问后再启动主进程
  • links属于Docker官方已废弃的特性,所有云厂商的容器服务基本都不支持该配置,后续不要在生产配置中使用

内容的提问来源于stack exchange,提问作者Oystein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:54:07