docker - Heroku env 变量 $DATABASE_URL 和 $PORT 没有显示在 dyno (heroku ps:exec)
问题描述
我创建了一个 docker 映像并将其发布到 heroku。为了让它正常工作,我需要DATABASE_URL
env 变量。Postgres 已配置给应用程序,我可以heroku config:get
很好地使用 db URL。然而毕竟完成后,我heroku ps:exec
进入我的应用程序,输入 'env' 并且没有$PORT
or $DATABASE_URL
,这意味着我的应用程序无法获取 db 字符串。
我采取的步骤:
Github 动作:
- name: Build and deploy the Docker image
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
APP_NAME: myApp
run: |
export DATABASE_URL=$(heroku config:get DATABASE_URL --app ${{ env.APP_NAME }})
docker login --username=_ --password=${{ env.HEROKU_API_KEY }} registry.heroku.com
docker build --build-arg DATABASE_URL_ARG=$DATABASE_URL -t registry.heroku.com/${{ env.APP_NAME }}/web .
docker push registry.heroku.com/${{ env.APP_NAME }}/web
Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS publish
WORKDIR /src
ARG DATABASE_URL_ARG
ENV DATABASE_URL=$DATABASE_URL_ARG
COPY . .
RUN dotnet tool install dotnet-ef && dotnet publish -c Release -o ./publish
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
ENV DATABASE_URL=$DATABASE_URL_ARG
WORKDIR /app
COPY --from=publish /src/publish .
CMD DATABASE_URL=${DATABASE_URL} dotnet app.dll
构建过程成功,postgres db 已播种。我不知道是否需要第二个 ENV,它是我试图让某些东西发挥作用的产物。
所以问题是:缺少的 $PORT 和 $DATABASE_URL 在哪里,我是如何让它们消失的?
解决方案
在我看来,您的问题是ARG 指令在定义它的构建阶段结束时超出范围,因此您也需要在构建的第二阶段定义 ARG:
# ...
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
ARG DATABASE_URL_ARG
ENV DATABASE_URL=$DATABASE_URL_ARG
WORKDIR /app
COPY --from=publish /src/publish .
CMD DATABASE_URL=${DATABASE_URL} dotnet app.dll
推荐阅读
- r - 为什么我的 PCA 和 MDS 图显示彼此的镜像,而不是显示相同的结果?
- json - 如何获取 Redis JSON 数据
- javascript - 通过使用提示向 javascript DateTime 对象添加秒数
- algorithm - 体素算法中的角点数组是什么?
- canvas - 将 Konva 缩放到可见区域的中心
- graph - Coldfusion:水平条形图上的 CFChart 格式标签
- c# - 无法让 Selenium with Edge 在基本的 C# 控制台应用程序中工作
- arrays - 如何使用聚合更新 mongodb 中的数组值
- c# - 如何使用 Microsoft Graph 更新 misc Exchange 设置?
- python - 无法在 Android 上播放音频(ffpyplayer) - buildozer