Docker 编写重新启动时缺少的环境变量



Setup

我有一个 docker-compose 设置(文件版本 3.7(,我将卷与

volumes:
- ${VOLUME_DIR}/media:/media
restart: unless-stopped

包括重启策略。

在我运行docker-compose up之前,我设置了export VOLUME_DIR=$HOME/volumes, 我的媒体文件夹所在的位置。 即在docker-compose up期间解决在$HOME/volumes/media中找到媒体文件夹。

我从非root用户启动它,它运行良好。

问题

重新启动计算机后,一切都将从root重新启动,并尝试在/root/volumes/media中找到媒体文件夹。

为什么会这样?它不只使用"最终"撰写文件,因为您可以通过运行docker-compose config看到它吗?我该如何解决这个问题?

编辑:澄清一下,我不第二次运行docker-compose up,我在设置ENV变量的情况下运行一次,并希望依靠重新启动策略来重新启动它,就像我最初在崩溃/系统重新启动时启动它一样。

第一个解决方案:

感谢 Exadra37 和 camba1 的评论,我至少可以通过在启动时创建一个 .env 文件来"转储"我在那里需要的当前 ENV 变量来运行它。

但是我仍然不明白 docker-compose 的重启策略在多大程度上保留了信息,那么为什么在运行docker-compose up时可能被硬烘焙的 ENV 变量被忽略了。

为什么会这样?

这将在不重新启动服务器的情况下发生,您只需要退出 shell 并再次返回它以松开您的export ...,因为导出它是临时的,只持续该 shell 会话。

它不只使用"最终"撰写文件,就像您可以通过运行 docker-compose 配置看到的那样吗?

因为运行 docker compose 命令时会解析该文件,并且如果未为当前 bash 会话环境设置VOLUME_DIR,则 docker compose 将无法对其进行评估。您可以通过为其指定默认值来解决它:

volumes:
- ${VOLUME_DIR:-/default/path/here}/media:/media
restart: unless-stopped

请记住,要使用 bash 变量扩展,您需要使用 docker 组合版本2.1或更高版本。

我该如何解决这个问题?

只需在docker-compose.yml所在的同一文件夹中创建一个.env文件:

VOLUME_DIR=/path/to/volume/here

最新更新