我正在尝试为我的树莓派交叉编译一个 Rust 应用程序(那里的编译非常慢)。 为此,我尝试在其他地方使用构建上下文执行 Dockerfile(因为 Docker 映像中需要一些证书和其他内容)。
Dockerfile (./myapp/Dockerfile)
FROM rust
RUN apt-get update && apt-get install -y pkg-config libssl-dev build-essential cmake
WORKDIR /home/myapp
COPY --from=local ./myapp/. .
COPY --from=local ./mqtt-helper/ /home/mqtt-helper/
COPY --from=local ./mqtt-broker/config/certs/ca.crt ./certs/
COPY --from=local ./mqtt-broker/config/certs/mqtt-subscriber.key ./certs/
COPY --from=local ./mqtt-broker/config/certs/mqtt-subscriber.crt ./certs/
ENV TZ=Europe/Berlin
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN cargo install --path .
EXPOSE 8080
CMD ["myapp"]
现在我正在尝试跑步:
docker buildx build --platform linux/arm64 --build-context local=./ ./myapp/
但是这个调用总是会导致:
[+] Building 0.0s (2/2) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 32B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
ERROR: failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: unsupported frontend capability moby.buildkit.frontend.contexts
谢谢你
根据这篇博文,您需要使用 Dockerfile 版本 1.4 或更高版本作为 Dockerfile 前端才能使用多个构建上下文。您当前设置捆绑的前端似乎尚不支持此功能。尝试将以下 parser 指令 放在
Dockerfile
的顶部:
# syntax=docker/dockerfile:1.4
这应该会自动下载
docker/dockerfile:1.4
图像并将其用作自定义 Dockerfile 前端,而不是与系统捆绑的前端。有关更多详细信息,请参阅自定义 Dockerfile 语法。