文章内容

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 rundocker-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 是长期服务型程序(监听日志),建议:

  1. 使用 docker-compose 管理

  2. 把所有环境变量写在 .env

  3. 修改 .env 后:

即可自动重建并使用新配置。


其它相关推荐:

1、Python 项目 docker 部署过程

2、Dockerfile 构建系统与 GitHub

3、Ubuntu 24.04 安装 Docker Compose v2

4、Docker 容器开机自动启动

5、Docker 迁移实例

分享到:

发表评论

评论列表