はじめに
DockerのOSをAlpine 3.13から3.19に上げたところ、CI/CDツールのCodeBuildやCircleCIのビルドで「/bin/sh: Operation not permitted」というエラーが出ました。
調べてみると、Alpine 3.14以降で仕様が変わっていて、ビルドに使われるDockerのバージョンが古いとエラーになるようです。
この記事では今回の対応でやったことについて備忘録的に残したいと思います。
やったこと
CodeBuildの場合
現在の仕様では、Dockerのバージョン指定は不要なため、
buildspec.ymlのruntime-versions
からDockerのバージョン指定を除外しました。
version: 0.2
phases:
- install:
- runtime-versions:
- docker: 18
次に、CodeBuildのビルドプロジェクトの環境設定からビルドイメージを
aws/codebuild/amazonlinux2-x86_64-standard:1.0
から
aws/codebuild/amazonlinux2-x86_64-standard:5.0
へ更新しました。
CloudFormationで定義している場合は以下のようになるかと思います。
CodeBuildProject:
Type: AWS::CodeBuild::Project
Properties:
Name: CodeBuildProject
ServiceRole: !Ref BuildRole
Artifacts:
Type: CODEPIPELINE
Environment:
Type: LINUX_CONTAINER
ComputeType: BUILD_GENERAL1_MEDIUM
- Image: aws/codebuild/amazonlinux2-x86_64-standard:1.0
+ Image: aws/codebuild/amazonlinux2-x86_64-standard:5.0
PrivilegedMode: true
以上でCodeBuildでの対応は完了です。
CircleCIの場合
CircleCIの設定ファイルで setup_remote_docker
のバージョン指定をdefaultにします。
この設定を行うとビルドで使われるDockerのイメージが最新に保たれます。
steps:
- setup_remote_docker:
- version: 17.11.0-ce
+ version: default
以上でCircleCIでの対応は完了です。
さいごに
誰かのお役に立てれば幸いです。