解决方法如下:
# 构建多平台的 Docker 镜像
FROM --platform=linux/amd64 alpine:latest AS builder
# 添加应用程序依赖
RUN apk add --no-cache curl
# 复制应用程序代码
COPY app /app
# 构建应用程序
RUN echo "Building application..."
# ...
# 构建最终镜像
FROM alpine:latest
# 复制应用程序二进制文件
COPY --from=builder /app /app
# 设置工作目录
WORKDIR /app
# 设置环境变量
ENV PORT=8080
# 暴露端口
EXPOSE $PORT
# 运行应用程序
CMD ["/app/myapp"]
上述代码示例中,首先使用了多平台的构建阶段(builder)来构建应用程序,该阶段使用 FROM --platform=linux/amd64 alpine:latest
指令指定了构建镜像时使用的平台为 linux/amd64
。然后,在最终镜像阶段使用了 FROM alpine:latest
指令来构建基础镜像。通过 COPY --from=builder /app /app
指令可以从构建阶段复制应用程序二进制文件到最终镜像中。最后,通过 ENV
指令设置环境变量,并通过 EXPOSE
指令暴露应用程序的端口。最后,使用 CMD
指令来指定容器启动时要运行的命令。
这样的做法可以确保只构建一个镜像,并在不同平台上运行。这样可以减少维护多个镜像的工作量,并且提供了更好的可移植性和可重用性。