"failed to export image: failed to create image: failed to get layer sha256:xxx: layer does not exist" というエラーで落ちる
ある日、AWSのCodeBuildが失敗した。
失敗前の修正でDockerfileを修正していたため、この変更が引き金になっていたのは明確だった。
ただ、エラーの内容が "failed to export image: failed to create image: failed to get layer sha256:xxx: layer does not exist"
というものだったため、最初原因がわからず悩んだ。
そしてエラーで落ちる箇所が Dockerfile内でCOPY
している箇所で落ちるというものだった
問題の解決のために参照したissueが下記となる。
自身の英語力の関係上、このissueをまだ深く読み解けたわけではないのだが、
どうやら原因としてはCOPY
コマンドの挙動に問題があるようだ。
整理すると
- AWS の CodeBuild で使用されているDocker環境が
COPY
コマンドに問題があるバージョンのよう - その環境で
COPY
コマンドを2度続けて実行したため failed to export image: failed to create image: failed to get layer sha256:xxx: layer does not exist" というエラーが発生していた
という形になる。
ただ以前もCOPYコマンドは同じように書いていたが、なぜ今回エラーになったのか?
ちょうどこのタイミングで使用するdocker imageをamazon linuxのv1からamazon linux v2に変えたことが原因としてありそうだ。
結果としては、COPY
コマンドを2回続けて書いていた箇所を削除し、一つのCOPY
で済ませるように変更することでこの問題は解決した。
ちなみにCodeBuildで動かす前にローカル環境(macOS)でdocker buildはしており、こちらは問題なく成功している。
ということは、ローカル上のDocker環境では問題ないということになる。
CodeBuildで動いているランタイムがたまたまこの問題を引き起こすものになっていたということだろうか。
AWS CodeBuildをローカル環境で試す
なお、AmazonはCodeBuildのDocker imageをDocker Hubで公開しているようだ。
https://hub.docker.com/r/amazon/aws-codebuild-local/
こちらは試していないが、もしこれで同じ環境でテストできるようなら、これは嬉しいところ