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

迁移docker-compose.yml后出现SSL连接错误的排查求助

问题分析与解决方法

问题根源

  1. 原目录运行正常是因为本地存有Digital Ocean数据库的CA证书文件,且docker-compose.yml通过本地目录挂载让容器能访问到证书;但推送至Docker Hub的镜像本身未包含该证书,空目录又缺少证书文件,导致容器启动后无法完成SSL验证,触发Error: The server does not support SSL connections。
  2. 后续添加环境变量时,要么DB_CA_CERT_PATH指向的路径在容器内不存在,要么本地未提供对应的证书文件,因此出现文件找不到(ENOENT)和变量未设置的警告。

解决方法

方案1:将CA证书打包进镜像(推荐,无需依赖本地文件)

修改项目的Dockerfile,把本地的CA证书文件复制到镜像内部的固定路径:

# 假设本地证书文件路径为 ./ca-certificate.crt,根据实际路径调整
COPY ./ca-certificate.crt /usr/local/share/ca-certificates/do-db-ca.crt

然后在docker-compose.yml中配置正确的环境变量:

services:
  your-app-service:
    environment:
      - DB_SSL=true
      - DB_CA_CERT_PATH=/usr/local/share/ca-certificates/do-db-ca.crt

重新执行docker compose build构建镜像,推送至Docker Hub后,在任意目录拉取镜像运行,容器都能直接读取内置的证书完成SSL连接。

方案2:在空目录手动提供证书并挂载

  1. 在空目录下创建certs子目录,将Digital Ocean数据库的CA证书文件(比如ca-certificate.crt)放入其中。
  2. 修改docker-compose.yml,添加挂载配置并设置正确的环境变量:
services:
  your-app-service:
    image: your-dockerhub-username/your-image:tag
    environment:
      - DB_SSL=true
      - DB_CA_CERT_PATH=/app/certs/ca-certificate.crt
    volumes:
      - ./certs:/app/certs

确保DB_CA_CERT_PATH的路径和容器内挂载的路径完全一致,且本地certs目录确实存在证书文件。

额外检查项

  • 确认Digital Ocean托管数据库的SSL连接要求为强制模式,应用侧必须启用SSL验证。
  • 确保环境变量DB_SSL已设置为true,部分应用默认不启用SSL,即使证书存在也不会触发验证流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:03:26