以下、作業用メモです。
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
コマンドを実行。
【参考サイト】