Я пытаюсь создать среду выполнения Rust для Lambda с помощью Amazon Linux 2023 (al2023), поэтому все работает на Docker, как показано ниже.
# Use cargo-lambda as the build environment
FROM ghcr.io/cargo-lambda/cargo-lambda:latest as builder
# Create app directory
WORKDIR /app
# Copy the Cargo.toml and Cargo.lock files
COPY . .
# Build the release version of your application
RUN cargo lambda build --arm64 --release
# Use the AWS Lambda provided base image for custom runtimes
FROM public.ecr.aws/lambda/provided:al2023
# Copy the compiled binary from the builder stage
COPY --from=builder /app/target/lambda/user/bootstrap ${LAMBDA_RUNTIME_DIR}
# Set the CMD to your handler
CMD ["bootstrap"]
Файл Docker работает нормально, и я могу запустить его с помощью docker run --rm -it -p 9000:8080 my-rust-lambda
но когда я звоню в конечную точку, я получаю qemu-aarch64: Could not open '/lib/ld-linux-aarch64.so.1': No such file or directory
что мне не хватает?
@Dodge_X образ докера поддерживает aarch64, насколько я понимаю из Gallery.ecr.aws/lambda/provided
или, может быть, базовому образу нужна дополнительная библиотека? может это поможет unix.stackexchange.com/questions/751329/…
@Dodge_X еще не пробовал, но теперь это работает, если я добавлю FROM --platform=linux/arm64 public.ecr.aws/lambda/provided:al2023
. появится предупреждение типа WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested
, но оно работает
понял. проблема в том, что вы создали образ на машине с процессором AMD64, но хотите запустить его на компьютере с процессором Arm64. Вам нужно добавить опцию «платформа».
новый Dockerfile
# Use cargo-lambda as the build environment
FROM ghcr.io/cargo-lambda/cargo-lambda:latest as builder
# Create app directory
WORKDIR /app
# Copy the Cargo.toml and Cargo.lock files
COPY . .
# Build the release version of your application
RUN cargo lambda build --arm64 --release
# Use the AWS Lambda provided base image for custom runtimes
FROM public.ecr.aws/lambda/provided:al2023
# Copy the compiled binary from the builder stage
COPY --from=builder /app/target/lambda/user/bootstrap ${LAMBDA_RUNTIME_DIR}
# Set the CMD to your handler
CMD ["bootstrap"]
Поддерживает ли базовый образ Docker aarch64 или контейнер работает на компьютере на базе aarch64?