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

Docker Compose中Localstack的Lambda无法访问MariaDB容器问题求助

排查Docker Compose部署Localstack+Lambda+MariaDB的调用问题

1. 统一自定义网络配置,避免动态命名问题

不要依赖Compose自动生成的<project>_default网络,显式定义一个自定义网络,确保所有服务(Localstack、MariaDB、Lambda执行容器)都在同一网络:

  • 在docker-compose.yml中添加自定义网络:
    networks:
      local-network:
        name: local-network
        driver: bridge
    
  • 给每个服务指定该网络:
    services:
      localstack:
        ...
        networks:
          - local-network
      mariadb:
        ...
        networks:
          - local-network
    
  • 设置Localstack的LAMBDA_DOCKER_NETWORK为这个显式的网络名local-network,避免动态命名导致的网络匹配失败。

2. 修正Lambda代码中的数据库连接地址

Lambda容器的localhost不等于宿主机或MariaDB容器,必须用Compose中MariaDB的服务名作为连接主机:

  • 比如MariaDB服务名为mariadb,连接字符串应写为:
    const connection = mysql.createConnection({
      host: 'mariadb', // 禁止使用localhost或127.0.0.1
      user: 'your-user',
      password: 'your-password',
      database: 'your-db',
      port: 3306 // 使用容器内部端口,而非宿主机映射端口
    });
    

3. 确保Lambda打包包含依赖库

JavaScript连接MariaDB需要mysql2或mysql包,必须将依赖与代码一起打包:

  • 在代码目录执行:
    npm install mysql2 --production
    zip -r lambda-package.zip index.js node_modules/
    
  • 上传这个lambda-package.zip到Localstack,不要只上传单个index.js文件。

4. 检查Localstack的Lambda执行配置

确保Localstack启用了正确的执行模式和服务:

  • 在docker-compose.yml的Localstack服务中添加:
    environment:
      - LOCALSTACK_SERVICES=lambda
      - LAMBDA_EXECUTOR=docker # 默认值为docker,确保未修改为其他模式
      - LAMBDA_DOCKER_NETWORK=local-network # 与自定义网络名保持一致
    

5. 提取详细错误日志定位问题

调用Lambda时获取精准错误信息:

  • 用AWS CLI(指向Localstack)调用并查看输出:
    aws lambda invoke --endpoint-url=http://localhost:4566 --function-name your-function-name output.json
    cat output.json
    
  • 查看Localstack容器日志,获取Lambda执行时的详细报错:
    docker logs <localstack-container-name>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:45:30