「docker-compose up -d」でエラー

以下、作業用メモです。

ERROR [ 2/12] COPY composer.json /var/www/
failed to solve: failed to compute cache key: “/composer.json” not found: not found

Dockerがcomposer.jsonというファイルを見つけられないために発生した。
Dockerfileで指定されたパスにそのファイルが存在しないか、またはファイル名が間違っている可能性がある。。。。

ただし、docker-compose.ymlファイルでは

・・・省略・・・ 
#Nginx Service
  nginx:
    image: nginx:alpine
    container_name: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./:/var/www/
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d
      - ./docker/nginx/ssl/:/etc/ssl
    networks:
      - app-network
・・・省略・・・ 

と設定しているので、ホストのカレントディレクトリ(.)がコンテナの/var/www/ディレクトリにマウントされている。
したがって、ホストのカレントディレクトリにcomposer.jsonが存在する必要がある。
場所を確認しプロジェクトディレクトリ直下にcomposer.jsonを作成することで解決。

no matching manifest for linux/arm64/v8 in the manifest list entries

このエラーは、Dockerがイメージをプルしようとしたときに、そのイメージがユーザーのシステムアーキテクチャ(この場合はlinux/arm64/v8)に対応していないことを示している。

具体的には、Dockerイメージは特定のCPUアーキテクチャ(例えば、amd64、arm64、armv7など)向けにビルドされ、それぞれのアーキテクチャ向けのバージョンがDocker Hubに格納されている。しかし、すべてのイメージがすべてのアーキテクチャをサポートしているわけではない。したがって、あるアーキテクチャ向けのイメージをプルしようとすると、そのイメージが存在しない場合にこのエラーが発生する。

この問題を解決する一つの方法は、docker-compose.ymlファイルにplatform: linux/x86_64を追加すること。これにより、Dockerはx86_64アーキテクチャ向けのイメージをプルするようになる。ただし、この方法が機能するためには、システムがx86_64のバイナリを実行できる必要がある。AppleのM1チップのようなARMベースのシステムでは、Rosetta 2を使用してx86_64のバイナリを実行できる。

以下、docker-compose.ymlファイルにplatform: linux/x86_64を追加する例:

version: '3'
services:
  db:
    platform: linux/x86_64 # ここを追加
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password

この変更を加えた後、再度docker-compose up -dコマンドを実行。

【参考サイト】

この記事を書いた人