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

Docker部署Strapi时database.js无法从.env读取MongoDB参数怎么办

Strapi Docker部署MongoDB Atlas环境变量读取失败问题解决方案

问题根因

你收到的URI does not have hostname, domain name and tld报错,核心原因是Docker容器运行时没有正确加载对应的环境变量,Strapi读取到的DATABASE_HOST为空值,导致最终拼接的MongoDB连接URI格式非法。

修复步骤

步骤1:清理冗余dotenv配置

Strapi原生支持从运行时环境变量读取配置,无需额外引入dotenv包,先修改config/database.js文件,删除冗余代码:

module.exports = ({ env }) => ({
  defaultConnection: 'default',
  connections: {
    default: {
      connector: 'mongoose',
      settings: {
        host: env('DATABASE_HOST', 'open-jade-cms-0.r07jc.mongodb.net'),
        srv: env.bool('DATABASE_SRV', true),
        port: env.int('DATABASE_PORT', 27017),
        database: env('DATABASE_NAME', 'open-jade-cms-dev'),
        username: env('DATABASE_USERNAME', 'open-jade-data-admin'),
        password: env('DATABASE_PASSWORD', 'uppERH7xmydTpXI8')
      },
      options: {
        authenticationDatabase: env('AUTHENTICATION_DATABASE', null),
        ssl: env.bool('DATABASE_SSL', true),
      },
    },
  },
});

步骤2:优化Dockerfile

删除安装dotenv的冗余步骤,修改后的Dockerfile如下:

FROM strapi/base

COPY ./ ./

RUN npm install

RUN npm run build

CMD ["npm","run", "start:develop"]

步骤3:运行容器时传入环境变量

Docker容器默认不会读取本地项目的.env文件,需要手动指定传入:

  • 直接用docker run命令启动的话,添加--env-file参数:
docker run -p 1337:1337 --env-file ./.env <你的镜像名称>
  • 若使用docker-compose部署,在对应服务配置中添加env_file字段:
services:
  strapi:
    build: .
    ports:
      - "1337:1337"
    env_file: ./.env

注意事项

  • 本地.env文件需放在项目根目录,变量名与配置中的名称完全一致,变量值不要加多余的引号、首尾空格
  • 需确认DATABASE_HOST的取值是MongoDB Atlas提供的正确SRV地址,无拼写错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 06:24:04