🤖
Heroku にイメージを push すると「No image to push」というエラーが発生
概要
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
解決方法
- ファイル名をDockerfile.processNameに修正し、ファイルをルートディレクトリに移動させる
参考ドキュメント
- MySQLのDockerfileは諦めて、cnfファイルを使わずにdocker-compose.ymlに設定を記載する
参考ドキュメント
「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