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
.
配合使用效果很好
我试图让开发和生产保持一致 Dockerfile
。 dev
和 prod
本质上是从 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 操作,但我相信错误是 prod
在 dev
之后。显然 docker build
中的 --target
标志意味着它会在那个阶段停止,所以它会 运行 它之前的所有内容。
要么是我做错了什么,要么是 Heroku 搞砸了。 Heroku 在 Dockerfile
中支持 targeting a particular stage。我有一个多级 Dockerfile,但 Heroku 不遵守我的 heroku.yml
中的 build.docker.release.target
。就其价值而言,定位与 docker-compose.yml
.
我试图让开发和生产保持一致 Dockerfile
。 dev
和 prod
本质上是从 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 操作,但我相信错误是 prod
在 dev
之后。显然 docker build
中的 --target
标志意味着它会在那个阶段停止,所以它会 运行 它之前的所有内容。