Heroku码头工人部署

时间:2016-11-25 15:04:04

标签: ruby-on-rails heroku docker

我正在关注这篇文章https://devcenter.heroku.com/articles/container-registry-and-runtime,我坚持使用“heroku container:push”。我运行“heroku container:push --app mediabox”并正确构建docker镜像,然后开始将其推送到注册表,这就是我得到的:

Successfully built 7926b98d51b5
The push refers to a repository [registry.heroku.com/mediabox/web]
38d48dd6de30: Preparing 
969058e6ddc9: Preparing 
2f454953e0e7: Preparing 
f67c1ecd32a1: Preparing 
44fade3982ca: Preparing 
0accb1c81980: Waiting 
e79bbdfaa0d3: Waiting 
1be5d1797b73: Waiting 
5c0a4f4b3a35: Waiting 
011b303988d2: Waiting 
error parsing HTTP 400 response body: unexpected end of JSON input: ""
 !    Error: docker push exited with 1

这是我的Dockerfile:

FROM ruby:2.3.1-alpine

RUN apk --update --no-cache add build-base less libxml2-dev libxslt-dev nodejs postgresql-dev && mkdir -p /app

WORKDIR /app

COPY Gemfile Gemfile.lock ./

RUN gem install bundler

RUN bundle

COPY . ./

CMD ["script/docker-entrypoint.sh"]

我在这里找不到解决方案。谢谢你的帮助。

6 个答案:

答案 0 :(得分:3)

当我忘记运行heroku container:login时,我遇到了这个问题。即使您已登录heroku,heroku容器服务也需要单独登录。这就是为什么您在上传开始时收到错误的原因 - 您未获得授权。

答案 1 :(得分:1)

  

registry.heroku.com/mediabox/web

只需创建一个名为' mediabox'的应用。通过使用heroku仪表板并再次尝试推送图像,它适用于我。

答案 2 :(得分:1)

遵循Heroku文档(https://devcenter.heroku.com/articles/container-registry-and-runtime#logging-in-to-the-registry):

  1. 登录:首先,检查您是否已登录。
  

docker login --username = YOUR_USER --password = $(heroku auth:令牌)   Registry.heroku.com

  

heroku容器:登录

  1. 推送图像:执行heroku cli或docker命令。
  

heroku容器:推送IMG_NAME

  

docker标记registry.heroku.com/ APP / IMG_NAME

     

docker push Registry.heroku.com/ APP / IMG_NAME

  1. 请注意,应用程序(上面的 APP 必须存在于Heroku仪表板上。

答案 3 :(得分:0)

首先,正如您所链接的文章所述,Heroku中的Docker集成在BETA中。它可能仍然有一些错误。因此,最好直接联系Heroku支持。

假设Heroku集成并且您的代码都正常,我只能建议您停止使用*List> listHead [1,2] 1 并仅使用官方docker命令。这可以避免一些推动问题。

您可以使用以下方式在本地构建图像:

heroku container:push

然后使用以下方法将其推送到Heroku:

docker build . 

我有基于Gitlab CI的生产环境和使用Docker的Heroku。我们所有的集成仅依赖于docker tag <image> registry.heroku.com/<app>/<process-type> docker push registry.heroku.com/<app>/<process-type> 命令,我们从未遇到过推送本地构建图像的任何问题。

答案 4 :(得分:0)

我需要明确传递应用名称,而不是内部版本,因​​此heroku container:push --app rocky-wildwood-86034进展顺利。

我做了: heroku容器:push --app mediabox

正确的是: heroku容器:推--app rocky-wildwood-86034

简单的应用名称应该是全局的heroku应用名称,而不是docker-compose.yml中定义的名称。

答案 5 :(得分:0)

当我忘记heroku container:login时,我遇到了同样的错误。不确定您的问题是否是由同一个用户错误引起的。