以下、作業用メモです。
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ファイルでは
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
・・・省略・・・ #Nginx Service nginx: image: nginx:alpine container_name: nginx ports: - "80:80" - "443:443" <strong> volumes: - ./:/var/www/</strong> - ./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
を追加する例:
1 2 3 4 5 6 |
version: '3' <strong>services: db:</strong> <strong> platform: linux/x86_64 # ここを追加</strong> image: mysql:8.0 command: --default-authentication-plugin=mysql_native_password |
この変更を加えた後、再度docker-compose up -d
コマンドを実行。
【参考サイト】