【问题标题】:Can't release pushed docker image in heroku无法在heroku中发布推送的docker镜像
【发布时间】:2020-08-02 22:13:19
【问题描述】:

我对 Heroku 很陌生。

问题描述

使用 JIB 成功将 docker 镜像推送到 Heroku Container Registry 后,我正在努力发布它。

我做了什么:

使用 JIB 推送 docker 镜像:

[INFO] Built and pushed image as hamzablm/timesheet
[INFO] Executing tasks:
[INFO] [===========================   ] 88.9% complete
[INFO] > launching layer pushers
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  51.106 s
[INFO] Finished at: 2020-04-20T11:16:20Z
[INFO] ------------------------------------------------------------------------

现在图像应该在注册表中。 但是当我想释放它时: heroku container:release hamzablm/timesheet 失败:

 ›   Error: Missing required flag:
 ›     -a, --app APP  app to run command against
 ›   See more help with --help

我可能在这里遗漏了一些简单的东西,但我们将不胜感激。

【问题讨论】:

  • 这不是我的情况,因为图像已经在注册表中
  • 同样的错误,你需要指定你的应用名称
  • 这很奇怪,因为从 Heroku CLI 命令中,如果您检查您的部分 (devcenter.heroku.com/articles/…),它会说 -a 是必需选项。然后,在示例中未指定。如果您尝试手动指定标志怎么办?
  • 指定 -a 选项也不起作用:▸ Couldn't find that app.

标签: docker heroku heroku-cli


【解决方案1】:

您在 heroku container:release 命令中使用图像名称,但您应该使用 Heroku 应用程序的名称。
这通常是您所需要的

docker push registry.heroku.com/appname/web
heroku container:release web -a appname

可以通过仪表板或 CLI 创建应用程序

【讨论】:

  • +1 这实际上似乎有效,它没有给我通常的错误。但是当我运行heroku container:release web -a timesheet 它说:You do not have access to the app timesheet. 即使在使用heroku login 登录到heroku 后它也不起作用@ 我错过了什么吗?帮助将不胜感激。
  • 你也heroku container:login了吗?并检查应用名称是否正确并与 Heroku 上创建的名称匹配
  • 你给图片加标签了吗?
  • 运行heroku container:login 时连接成功,但运行heroku container:release web -a timesheet 时连接成功You do not have access to the app timesheet.
  • 好的,工作流程如下: - docker build -t myImage 。 - docker tag myImage registry.heroku.com/myApp/web - docker push registry.heroku.com/myApp/web - heroku container:release web -a myApp 该标签指定发布所需的进程类型(web) cmd
【解决方案2】:

所以我遇到了同样的问题。但是,我正在使用需要的 docker 映像 被标记并通过 Travis CI 中的管道推送到 heroku 注册表。在这之后,我看到它还没有发布。尝试释放容器时,它会失败并给出与您遇到的相同的错误。在下面的步骤中,我将解释我的修复。请注意 $VARIABLE 包含在 Travis CI 中传递的变量。

第一步

我通过我的 Docker 使用 Heroku API 密钥登录到 Heroku。

docker login --username _ --password=$HEROKU_API_KEY registry.heroku.com

第 2 步

我将我的 Docker 镜像标记到 Heroku 的注册表中。 请注意以下几点,我使用 $TRAVIS_BUILD_NUMBER 作为我的流程类型。 这是一个由 Travis CI 本身实例化的变量,不必声明。 在 Heroku 显示的示例中,他们使用单词“web”作为示例,但您可以随意指定它。

docker tag $DOCKER_USER/$DOCKER_IMAGE:latest registry.heroku.com/$HEROKU_APP_NAME/$TRAVIS_BUILD_NUMBER

第三步

我将图像推送到 Heroku 注册表。

docker push registry.heroku.com/$HEROKU_APP_NAME/$TRAVIS_BUILD_NUMBER

第四步

我通过指定进程类型 ($TRAVIS_BUILD_NUMBER) 和 Heroku 应用名称 ($HEROKU_APP_NAME) 将容器释放到 Heroku。

heroku container:release $TRAVIS_BUILD_NUMBER --app $HEROKU_APP_NAME

我希望您已经修复了它,但这可能会更好地了解您的命令失败的原因。它缺少进程类型和 --app 标志。在下面的示例中,我假设 hamzablm/timesheet 是您的 $HEROKU_APP_NAME 变量:

 heroku container:release $MISSING_PROCESS_TYPE --app hamzablm/timesheet

我希望这能提供更好的理解。

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2021-02-27
    • 2020-04-06
    • 2021-11-22
    • 2021-12-03
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    相关资源
    最近更新 更多