docker 环境变量踩坑记录

在docker中部署了一个PHP的站点,站点基于laravel
配置环境变量在根目录.env文件中
用到了Redis,.env文件Redis配置片段如下

# redis配置
REDIS_HOST=redis
REDIS_PASSWORD=xxx
REDIS_PORT=6379

部署完成后,打开站点,一直报错Redis::connect() expects parameter 2 to be int, string given
查看日志,发现关键错误如下:Redis::connect("redis", "tcp://10.x.x.x:6379")
10.x.x.x是docker为redis分配的内网ip,本来这里应该是我.env文件中定义的6379

随后去查资料,最后找到了原因

产生这个问题的原因是,我有一个redis容器,于是docker会自动创建类似下方的环境变量

REDIS_PORT="tcp://10.0.0.15:6379"
REDIS_NAME="/runner-72989761-project-19846207-concurrent-0-62507216079cf651-build-3/redis"


加载.env文件定义的参数时,会先判断环境变量中是否存在,如果不存在才会加载,于是导致我定义在.env文件中的REDIS_PORT=6379被覆盖了

于是给站点所在容器增加了环境变量REDIS_PORT=6379,解决了问题

相关连接:stackoverflow docke docs laravel中env文件的加载

posted @ 2022-05-06 11:10  风轻云断  阅读(398)  评论(0编辑  收藏  举报