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