heroku.yml 不遵守 docker 构建目标

heroku.yml not respecting docker build target

要么是我做错了什么,要么是 Heroku 搞砸了。 Heroku 在 Dockerfile 中支持 targeting a particular stage。我有一个多级 Dockerfile,但 Heroku 不遵守我的 heroku.yml 中的 build.docker.release.target。就其价值而言,定位与 docker-compose.yml.

配合使用效果很好

我试图让开发和生产保持一致 Dockerfiledevprod 本质上是从 base 派生出来的。我可以充实它,但阶段是:

FROM python:3.10.0-slim-buster AS venv

...


FROM python:3.10.0-slim-buster as base

...


FROM base AS dev

...

ENTRYPOINT ["entrypoint.dev.sh"]



FROM base AS prod

...

ENTRYPOINT ["entrypoint.prod.sh"]

我的heroku.yml专门针对prod阶段:

setup:
    addons:
        - plan: heroku-postgresql
          as: DATABASE
build:
    docker:
        release:
            dockerfile: image/app/Dockerfile
            target: prod
        web: image/app/Dockerfile
    config:
        DJANGO_ENV: production
release:
    image: web
    command:
        - ./deployment-tasks.sh
run:
    web: gunicorn server.wsgi:application --bind 0.0.0.0:$PORT --log-level debug --access-logfile - --error-logfile -

然而,Heroku 构建所有阶段,似乎它只是沿着 Dockerfile 运行直到结束。 Heroku 构建日志显示 first dev 遵循 base

然后产品跟随开发

我希望它从 base 跳到 prod,跳过 dev

这是我的问题还是 Heroku 的问题?

我没有用 heroku.yml 测试过这个,因为我已经转到 GitHub 操作,但我相信错误是 proddev 之后。显然 docker build 中的 --target 标志意味着它会在那个阶段停止,所以它会 运行 它之前的所有内容。