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
相关产品推荐
相关产品推荐

