You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Vapor自定义Docker容器部署失败求助

解决Laravel Vapor自定义Docker容器部署失败(媒体类型不支持)问题

问题背景

将Laravel Vapor切换为自定义Docker容器后,执行vapor deploy时部署失败,AWS提示源镜像的清单或层媒体类型不支持。相关配置及环境如下:

Dockerfile配置

FROM laravelphp/vapor:php83-arm

COPY . /var/task

vapor.yml配置片段

adamsportal:
        memory: 1024
        storage: adamsportal-storage
        cli-memory: 512
        domain: adamsportal.theowldev.co.uk
        database: nest-db-test2
        network: nest2-test-network
        runtime: docker-arm
        build:
            - "COMPOSER_MIRROR_PATH_REPOS=1 composer install --no-dev"
            - "php artisan event:cache"
            - "npm ci && npm run build && rm -rf node_modules"

ECR镜像清单问题

已上传至ECR的镜像清单包含一个architecture和os均为unknown的manifest条目:

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.oci.image.index.v1+json",
   "manifests": [
      {
         "mediaType": "application/vnd.oci.image.manifest.v1+json",
         "size": 4663,
         "digest": "sha256:942a74e943c5d3eb617d58947806beb9a9371b8b016b2e1150f1c317ac04cbe9",
         "platform": {
            "architecture": "arm64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.oci.image.manifest.v1+json",
         "size": 566,
         "digest": "sha256:1340c45ef59e13199ae781ccf573eb02d6280ae564134144e0b2cfac60e2874e",
         "platform": {
            "architecture": "unknown",
            "os": "unknown"
         }
      }
   ]
}

环境信息

  • Laravel Vapor 1.65.1
  • Docker Desktop 4.38.0(181591)
  • Mac Pro M2 PRO

解决方案

问题出在Docker构建时生成了包含unknown架构的多平台镜像索引,而AWS Lambda(Laravel Vapor依赖的底层服务)不支持这种非标准的manifest条目。可以通过以下步骤修复:

1. 指定单一平台构建镜像

在构建Docker镜像时,明确指定平台为linux/arm64,避免生成多余的unknown架构manifest:

docker build --platform linux/arm64 -t your-image-name .

或者在Dockerfile开头添加平台声明:

# syntax=docker/dockerfile:1.4
FROM --platform=linux/arm64 laravelphp/vapor:php83-arm

COPY . /var/task

2. 调整Vapor构建流程

如果使用Vapor自动构建镜像,可在项目根目录创建docker-build.sh脚本:

#!/bin/bash
docker build --platform linux/arm64 -t "$VAPOR_IMAGE_NAME" .

然后在vapor.yml中替换build配置:

build:
    - "./docker-build.sh"
    - "COMPOSER_MIRROR_PATH_REPOS=1 composer install --no-dev"
    - "php artisan event:cache"
    - "npm ci && npm run build && rm -rf node_modules"

3. 清理ECR中的旧镜像

删除ECR中包含unknown架构的旧镜像,确保新上传的镜像只有linux/arm64的manifest:

aws ecr batch-delete-image --repository-name your-repo-name --image-ids imageTag=your-tag

4. 重新部署

执行vapor deploy重新部署,此时镜像清单应该只包含arm64架构的条目,AWS Lambda就能正常识别。


内容的提问来源于stack exchange,提问作者Adam Groom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:16:12