Fly.io部署时Dockerfile无法读取fly.toml环境变量求助
问题原因
fly.toml中[env]配置的环境变量是容器运行时生效的,而你在Dockerfile的RUN指令里读取的是镜像构建阶段的变量。flyctl不会自动将fly.toml里的运行时环境变量传递给Docker的构建过程,所以ARG API没有获取到值,导致echo $API输出为空。
解决方案
根据你的需求分两种情况处理:
情况1:构建镜像时需要使用这个变量
如果必须在RUN这类构建阶段指令中使用该变量,需要在部署时手动将变量传递给Docker构建:
- 执行部署命令时通过
--build-arg参数传入:flyctl deploy --build-arg API=ABC - 这样Dockerfile里的
ARG API就能获取到值,后续的ENV和RUN指令也能正常使用该变量。
情况2:仅容器运行时需要使用这个变量
如果只是需要在容器启动后使用该变量,完全不需要在Dockerfile中配置ARG和ENV:
- 保留fly.toml里的
[env]配置不变:[env] API = "ABC" - 修改Dockerfile,去掉
ARG和ENV相关配置,把需要执行的输出逻辑放到CMD或ENTRYPOINT中(这两个是容器启动时执行的,此时运行时环境变量已注入):CMD echo $API - 重新执行
flyctl deploy,容器启动后就能正确输出ABC。
内容的提问来源于stack exchange,提问作者Peter I
相关产品推荐
相关产品推荐

