文章内容
2025/12/9 1:07:48,作 者: 黄兵
Docker 修改 .env 执行 docker restart 不生效
我在上一篇文章中:Python 项目 docker 部署过程我们部署了一个 Python 项目,但是现在有一个问题,如果我修改了 .env 文件,通过执行:
docker restart log-parser
并不会生效,这是为什么呢?
🚫 为什么 docker restart 不生效?
因为:
-
restart = restart process
-
不会 recreate container
-
不会 reload .env
-
不会 change environment variables
docker restart 不会重新读取你宿主机修改过的 .env 文件,这是正常现象。
✅ 【关键原因】
.env 文件只在 docker run 或 docker-compose up 时加载一次。
容器一旦创建完成:
-
docker restart只是 重启容器进程 -
不会重新读取
.env -
不会重新创建容器
-
不会更新环境变量
所以容器内部依然使用 创建时写入的旧环境变量。
🔍 现在遇到的情况是:
修改了 .env
⬇
执行 docker restart swift-log-parser
⬇
容器使用旧的环境变量(因为没有重新创建容器)
⭐ 如何让新 .env 生效?
✅ 方式 1:重新创建容器(最常用)
docker stop swift-log-parser docker rm swift-log-parser docker run --env-file .env ... # 重新创建
⚠ docker run 时记得重新带上你原本的参数。
✅ 方式 2:你用的是 docker compose(更推荐)
如果是 docker compose 管理服务:
docker compose down docker compose up -d
.env 会在 docker compose up 时重新加载。
❗方式 3:强制覆盖单个环境变量(不推荐)
可以用:
docker exec swift-log-parser printenv
查看容器中的值。
如果只是要修改某几个参数,可以在 docker-compose.yaml 里写:
environment: - LOG_PATH=/var/log/new.log
然后:
docker-compose up -d
这会覆盖 .env。
🔧 建议最佳做法
如果运行的 log-parser 是长期服务型程序(监听日志),建议:
-
使用
docker-compose管理 -
把所有环境变量写在
.env -
修改
.env后:
即可自动重建并使用新配置。
其它相关推荐:
评论列表