【问题标题】:Heroku Buildpacks in Docker ImagesDocker 镜像中的 Heroku Buildpacks
【发布时间】:2020-12-22 23:28:58
【问题描述】:

我构建自己的 docker 镜像并在 Heroku 上运行它们。这很好用,这里有一个示例 Docker 文件:

FROM node:14-alpine
WORKDIR /app
COPY ./ncc/web ./
CMD node ./index.js

问题是我还想在运行节点时使用 Jemalloc 来更好地管理内存。我过去在使用普通节点 dynos(不是 docker 图像)时使用过这个 Jemalloc buildpack,效果很好:

https://github.com/gaffneyc/heroku-buildpack-jemalloc

如果我理解正确,但是 buildpack 和 docker 映像不兼容?所以这个 buildpack 不会自动从我的图像中获得?

有没有办法让 buildpack 在我的映像中运行?

如果没有,有人知道我如何在我的实例中安装和使用 jemalloc?

【问题讨论】:

    标签: node.js docker heroku buildpack jemalloc


    【解决方案1】:

    我认为Cloud Native Buildpacks 是您所需要的。 Cloud Native Buildpacks 生成 Docker 映像作为输出,这意味着您甚至不需要 Dockerfile

    heroku/buildpacks:18 CNB 构建器映像包括 heroku/nodejs 构建包。但是您需要手动添加 jemalloc buildpack。由于 jemalloc 是旧式构建包(即不是 Cloud Naitve),因此您需要使用 CNB shim。通过这种方式,您可以使用此 URL 引用 buildpack:

    https://buildpack-registry.heroku.com/cnb/gaffneyc/jemalloc
    

    综上所述,安装了 Pack CLI 后,您应该可以运行了:

    $ pack build --builder heroku/buildpacks:18 --buildpack heroku/nodejs,https://buildpack-registry.heroku.com/cnb/gaffneyc/jemalloc my app
    

    【讨论】:

    • 谢谢队友我真的很感谢你的帮助,我认为你在正确的轨道上,但是运行:```pack build --publish --builder heroku/buildpacks:18 --buildpack heroku/nodejs ,buildpack-registry.heroku.com/cnb/gaffneyc/jemallocheroku18-nodejs-jemalloc ``` 结果错误:``` 错误:没有 buildpack 组通过检测。错误:请检查您是否在正确的路径上运行。错误:检测失败:没有参与的构建包错误:构建失败:执行生命周期:失败,状态码:100 ```
    • 确保将https:// 放在https://buildpack-registry.heroku.com/cnb/gaffneyc/jemalloc URL 前面
    • 您运行命令的目录是否有package.json
    • 我不确定。实际上,我最终找到了一种不同的方法来解决这个问题,只需将 jemalloc 添加到我的 docker 映像中:hub.docker.com/repository/docker/mikeysee/battletabs
    猜你喜欢
    • 2020-09-09
    • 2021-03-14
    • 2019-09-16
    • 2020-05-26
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    相关资源
    最近更新 更多