🤖

Heroku にイメージを push すると「No image to push」というエラーが発生

2022/04/14に公開

概要

Circle CI 上で Heroku にイメージを push する際、「No image to push」というエラーが発生

原因

  • Herokuへ作成したDockerfileを用いたイメージのpushを行うにはアプリケーション直下のディレクトリでDockerfileを用意しなければならない
  • 現在のディレクトリ構成ではDockerfileが指定された場所にないためHerokuが「No image to push」とエラーを吐いた
# ディレクトリ構成
$ tree -I 'src'
.
├── docker
│   ├── db
│   │   ├── Dockerfile
│   │   └── my.cnf
│   └── web
│       └── Dockerfile
├── docker-compose.yml
└── start.sh

解決方法

  1. ファイル名をDockerfile.processNameに修正し、ファイルをルートディレクトリに移動させる

参考ドキュメント
https://devcenter.heroku.com/ja/articles/container-registry-and-runtime#pushing-multiple-images

  1. MySQLのDockerfileは諦めて、cnfファイルを使わずにdocker-compose.ymlに設定を記載する

参考ドキュメント
https://hub.docker.com/_/mysql
「Using a custom MySQL configuration file」が該当の箇所です

今回は作業の少ない「1」を行う

作業

ファイル名をDockerfile.processNameに修正

mv docker/db/Dockerfile docker/db/Dockerfile.db

mv docker/web/Dockerfile docker/web/Dockerfile.web

ファイルをルートディレクトリに移動させる

mv docker/db/Dockerfile.db ./

mv docker/web/Dockerfile.web ./
# ディレクトリ構成
$ tree -I 'src'
.
├── Dockerfile.db
├── Dockerfile.web
├── docker
│   └── db
│       └── my.cnf
├── docker-compose.yml
└── start.sh

config.ymlを修正

Herokuに複数のイメージをpushする場合にはheroku container:push --recursive コマンドを実行します

command: heroku container:push --recursive -a $HEROKU_APP_NAME

Circle CI上で再度Herokuにデプロイ

無事にHerokuへpushでき、CDも完了しました!

Discussion