Heroku码头工人部署

Kam*_*cki 6 ruby-on-rails heroku docker

我正在关注这篇文章https://devcenter.heroku.com/articles/container-registry-and-runtime并且我坚持使用"heroku container:push".我运行"heroku容器: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
Run Code Online (Sandbox Code Playgroud)

这是我的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"]
Run Code Online (Sandbox Code Playgroud)

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

use*_*633 7

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


Luí*_*ito 0

首先,正如您链接的文章所述,Heroku 中的 Docker 集成处于测试阶段。它可能仍然存在一些错误。因此,直接联系 Heroku 支持人员可能是个好主意。

假设 Heroku 集成和您的代码都正常,我只能建议您停止使用heroku container:push并仅使用官方 docker 命令。这可以避免一些推送问题。

您可以使用以下方法在本地构建映像:

docker build . 
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令将其推送到 Heroku:

docker tag <image> registry.heroku.com/<app>/<process-type>
docker push registry.heroku.com/<app>/<process-type>
Run Code Online (Sandbox Code Playgroud)

我有基于 Gitlab CI 和 Heroku 使用 Docker 的生产环境。我们所有的集成仅依赖于docker命令,并且我们在推送本地构建的图像时从未遇到过任何问题。