一次关于Docker buildx 跨平台打包问题的排查

项目地址:

https://github.com/loggie-io/loggie/blob/main/Dockerfile#LL17C1-L18C1

原始Dockerfile:

# Build the binary
FROM --platform=$BUILDPLATFORM golang:1.18 as builder

ARG TARGETARCH
ARG TARGETOS

# Copy in the go src
WORKDIR /
COPY . .
# Build
#RUN make build

RUN if [ "$TARGETARCH" = "arm64" ]; then apt-get update && apt-get install -y gcc-aarch64-linux-gnu && export CC=aarch64-linux-gnu-gcc && export CC_FOR_TARGET=gcc-aarch64-linux-gnu; fi \
  && GOOS=$TARGETOS GOARCH=$TARGETARCH CC=$CC CC_FOR_TARGET=$CC_FOR_TARGET make build

# Run
FROM  --platform=$BUILDPLATFORM debian:buster-slim
WORKDIR /
COPY --from=builder /loggie .

ENTRYPOINT ["/loggie"]

发现打包的镜像在arm里并没有正常运行,除了主程序,容器里ls 一类的工具一运行就出现

但是二进制运行 就提示 exec /usr/bin/tail: exec format error

后来观察日志问题在:

FROM  --platform=$BUILDPLATFORM debian:buster-slim

当这么写的时候:

日志为:

[+] Building 144.5s (16/16) FINISHED                                                                                                                
 => [internal] load build definition from Dockerfile                                                                                           0.0s
 => => transferring dockerfile: 602B                                                                                                           0.0s
 => [internal] load .dockerignore                                                                                                              0.0s
 => => transferring context: 2B                                                                                                                0.0s
 => [linux/amd64 internal] load metadata for docker.io/library/debian:buster-slim                                                              2.3s
 => [linux/amd64 internal] load metadata for docker.io/library/golang:1.18                                                                     2.3s
 => [auth] library/golang:pull token for registry-1.docker.io                                                                                  0.0s
 => [auth] library/debian:pull token for registry-1.docker.io                                                                                  0.0s
 => CACHED [linux/amd64 stage-1 1/3] FROM docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81  0.0s
 => => resolve docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81a99ad22a2                    0.0s
 => [internal] load build context                                                                                                              0.7s
 => => transferring context: 753.11kB                                                                                                          0.7s
 => CACHED [linux/amd64 builder 1/4] FROM docker.io/library/golang:1.18@sha256:50c889275d26f816b5314fc99f55425fa76b18fcaf16af255f5d57f09e1f48  0.0s
 => => resolve docker.io/library/golang:1.18@sha256:50c889275d26f816b5314fc99f55425fa76b18fcaf16af255f5d57f09e1f48da                           0.0s
 => [linux/amd64 builder 2/4] COPY . .                                                                                                         0.7s
 => [linux/amd64->arm64 builder 3/4] RUN if [ "arm64" = "arm64" ]; then apt-get update && apt-get install -y gcc-aarch64-linux-gnu && expor  124.9s
 => [linux/amd64 builder 3/4] RUN if [ "amd64" = "arm64" ]; then apt-get update && apt-get install -y gcc-aarch64-linux-gnu && export CC=aa  100.3s
 => CACHED [linux/amd64 stage-1 2/3] COPY --from=builder /loggie .                                                                             0.0s
 => [linux/amd64 stage-1 2/3] COPY --from=builder /loggie .                                                                                    0.1s
 => exporting to image                                                                                                                        14.9s
 => => exporting layers                                                                                                                        1.5s
 => => exporting manifest sha256:5aeb7b9cf0b4575d1afd8d994f096fc6ca2e6113a0b513bbc587a16962b1f20d                                              0.0s
 => => exporting config sha256:646f9862930a829e8a2a01b8aab615e049907988b3261d1f12a8121abb7db7fd                                                0.0s
 => => exporting attestation manifest sha256:dc45f03c3871b19eb2936be56d9b322190870e85481c15e29d706aaaa0cf7efd                                  0.0s
 => => exporting manifest sha256:3c9f7ae0f9a38731ab3eb677f5d2fd0b96ba862cca17004474254ac15f4a64f9                                              0.0s
 => => exporting config sha256:e1c214589c60067b69df8c1330039affd7c8e4504cfcb007a8bdcb6211296406                                                0.0s
 => => exporting attestation manifest sha256:d43e237194eb54827324492b7e7497e2d06b0eb4cc6d97268ed41f78dddc785d                                  0.0s
 => => exporting manifest list sha256:5dc044ecbcaf9b1cccddb8a5eed2c3f7e6d59e1b9c60cdf726bcdaf0c0fce014                                         0.0s
 => => pushing layers                                                                                                                         10.2s
 => => pushing manifest for docker.io/zhangleihunter/loggie-test:1.0.2-rc.12.18@sha256:5dc044ecbcaf9b1cccddb8a5eed2c3f7e6d59e1b9c60cdf726bcda  2.9s
 => [auth] zhangleihunter/loggie-test:pull,push token for registry-1.docker.io 

发现buster-slim只编译了amd64

=> CACHED [linux/amd64 stage-1 1/3] FROM docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81  0.0s
 => => resolve docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81a99ad22a2                    0.0s

如果改为:

FROM  debian:buster-slim

观察日志:

 => [internal] load build definition from Dockerfile                                                                                           0.0s
 => => transferring dockerfile: 575B                                                                                                           0.0s
 => [internal] load .dockerignore                                                                                                              0.0s
 => => transferring context: 2B                                                                                                                0.0s
 => [linux/amd64 internal] load metadata for docker.io/library/debian:buster-slim                                                              2.0s
 => [linux/amd64 internal] load metadata for docker.io/library/golang:1.18                                                                     1.9s
 => [linux/arm64 internal] load metadata for docker.io/library/debian:buster-slim                                                              2.2s
 => [auth] library/debian:pull token for registry-1.docker.io                                                                                  0.0s
 => [auth] library/golang:pull token for registry-1.docker.io                                                                                  0.0s
 => [linux/amd64 stage-1 1/3] FROM docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81a99ad22  0.1s
 => => resolve docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81a99ad22a2                    0.1s
 => CACHED [linux/amd64 builder 1/4] FROM docker.io/library/golang:1.18@sha256:50c889275d26f816b5314fc99f55425fa76b18fcaf16af255f5d57f09e1f48  0.1s
 => => resolve docker.io/library/golang:1.18@sha256:50c889275d26f816b5314fc99f55425fa76b18fcaf16af255f5d57f09e1f48da                           0.1s
 => [internal] load build context                                                                                                              0.6s
 => => transferring context: 1.80MB                                                                                                            0.6s
 => [linux/arm64 stage-1 1/3] FROM docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81a99ad22  0.1s
 => => resolve docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81a99ad22a2                    0.1s
 => [linux/amd64 builder 2/4] COPY . .                                                                                                         0.7s
 => [linux/amd64->arm64 builder 3/4] RUN if [ "arm64" = "arm64" ]; then apt-get update && apt-get install -y gcc-aarch64-linux-gnu && expor  148.3s
 => [linux/amd64 builder 3/4] RUN if [ "amd64" = "arm64" ]; then apt-get update && apt-get install -y gcc-aarch64-linux-gnu && export CC=aa  103.9s
 => CACHED [linux/amd64 stage-1 2/3] COPY --from=builder /loggie .                                                                             0.0s
 => CACHED [linux/arm64 stage-1 2/3] COPY --from=builder /loggie .                                                                             0.0s
 => exporting to image                                                                                                                         6.8s
 => => exporting layers                                                                                                                        0.0s
 => => exporting manifest sha256:e2465d6e467ad3936956beb6035f92c66adf06c45d96a85f9a9b992c1caa1cec                                              0.0s
 => => exporting config sha256:b19578f52ae496f3bfda186e8b663594dc7a583e4875a83880739c22e5c09f64                                                0.0s
 => => exporting attestation manifest sha256:126a553110ae16c0d2fe72f622f172304dbf0a099d61aa8253f478e40163b6f8                                  0.0s
 => => exporting manifest sha256:a3cf109c332df7bf983b979213e7299accc0246303eda52651345438a701b35c                                              0.0s
 => => exporting config sha256:728a3afcd9d0448a569dfc423b3b1c9a41a37b676d60a164a3c052847bea00ec                                                0.0s
 => => exporting attestation manifest sha256:d0c9332ece059a88aed214a73cfa8e513da238c4548666f4db7d7738b34e0908                                  0.0s
 => => exporting manifest list sha256:487ef9c399408f8240660219ce2d84927b7cce46f4c87daf66306eef57023c4f                                         0.0s
 => => pushing layers                                                                                                                          3.8s
 => => pushing manifest for docker.io/zhangleihunter/loggie:1.0.1-rc.13@sha256:487ef9c399408f8240660219ce2d84927b7cce46f4c87daf66306eef57023c  2.7s
 => [auth] zhangleihunter/loggie:pull,push token for registry-1.docker.io                                                                      0.0s
 => [auth] zhangleihunter/loggie:pull,push zhangleihunter/loggie-test:pull token for registry-1.docker.io                                      0.0s
zhanglei@zhanglei-HP-ZHAN-66-Pro-14-inch-G5-Notebook-PC:~/data/loggie$ sudo docker buildx build --platform=linux/amd64,linux/arm64 -t hub.eoitek.net/library/loggie:1.0.1-rc.13 . --push
[+] Building 137.0s (16/16) FINISHED                                                                                                                
 => [internal] load build definition from Dockerfile                                                                                           0.0s
 => => transferring dockerfile: 575B                                                                                                           0.0s
 => [internal] load .dockerignore                                                                                                              0.0s
 => => transferring context: 2B                                                                                                                0.0s
 => [linux/arm64 internal] load metadata for docker.io/library/debian:buster-slim                                                              0.8s
 => [linux/amd64 internal] load metadata for docker.io/library/golang:1.18                                                                     0.8s
 => [linux/amd64 internal] load metadata for docker.io/library/debian:buster-slim                                                              0.8s
 => CACHED [linux/arm64 stage-1 1/3] FROM docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81  0.1s
 => => resolve docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81a99ad22a2                    0.1s
 => CACHED [linux/amd64 builder 1/4] FROM docker.io/library/golang:1.18@sha256:50c889275d26f816b5314fc99f55425fa76b18fcaf16af255f5d57f09e1f48  0.1s
 => => resolve docker.io/library/golang:1.18@sha256:50c889275d26f816b5314fc99f55425fa76b18fcaf16af255f5d57f09e1f48da                           0.1s
 => [internal] load build context                                                                                                              0.6s
 => => transferring context: 1.80MB                                                                                                            0.6s
 => CACHED [linux/amd64 stage-1 1/3] FROM docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81  0.1s
 => => resolve docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81a99ad22a2                    0.1s
 => [linux/amd64->arm64 builder 2/4] COPY . .                                                                                                  0.7s
 => [linux/amd64 builder 3/4] RUN if [ "amd64" = "arm64" ]; then apt-get update && apt-get install -y gcc-aarch64-linux-gnu && export CC=aar  96.5s
 => [linux/amd64->arm64 builder 3/4] RUN if [ "arm64" = "arm64" ]; then apt-get update && apt-get install -y gcc-aarch64-linux-gnu && expor  124.1s
 => [linux/amd64 stage-1 2/3] COPY --from=builder /loggie .                                                                                    0.1s
 => [linux/arm64 stage-1 2/3] COPY --from=builder /loggie .                                                                                    0.1s
 => exporting to image                                                                                                                         9.5s
 => => exporting layers                                                                                                                        2.7s
 => => exporting manifest sha256:5aeb7b9cf0b4575d1afd8d994f096fc6ca2e6113a0b513bbc587a16962b1f20d                                              0.0s
 => => exporting config sha256:646f9862930a829e8a2a01b8aab615e049907988b3261d1f12a8121abb7db7fd                                                0.0s
 => => exporting attestation manifest sha256:a97e490890a7b2fec29de11c5dfbcd66625d354c24b5553ce93b1f46aaa4582c                                  0.1s
 => => exporting manifest sha256:28d9c25d4427a8d297a37c7f6f61ebb14831ab361054427cf939b82602555df8                                              0.0s
 => => exporting config sha256:33dacabdb6c862b3bd209bcace8d3d07259a69315d4eb9cfe7f0778b8baa2582                                                0.0s
 => => exporting attestation manifest sha256:fe44df4e47d05a039fab21b8f7ab7331588a562ff387193ffebd47d825b68034                                  0.1s
 => => exporting manifest list sha256:82accdc70b8c95517f131913e8745393aa584099a8b9621a1f4998809edecc44                                         0.0s
 => => pushing layers                                                                                                                          6.0s
 => => pushing manifest for hub.eoitek.net/library/loggie:1.0.1-rc.13@sha256:82accdc70b8c95517f131913e8745393aa584099a8b9621a1f4998809edecc44  0.5s
 => [auth] library/loggie:pull,push token for hub.eoitek.net

发现打包的日志:

=> [linux/amd64 stage-1 1/3] FROM docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81a99ad22  0.1s
 => => resolve docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81a99ad22a2                    0.1s
 => CACHED [linux/amd64 builder 1/4] FROM docker.io/library/golang:1.18@sha256:50c889275d26f816b5314fc99f55425fa76b18fcaf16af255f5d57f09e1f48  0.1s
 => => resolve docker.io/library/golang:1.18@sha256:50c889275d26f816b5314fc99f55425fa76b18fcaf16af255f5d57f09e1f48da                           0.1s
 => [internal] load build context                                                                                                              0.6s
 => => transferring context: 1.80MB                                                                                                            0.6s
 => [linux/arm64 stage-1 1/3] FROM docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81a99ad22  0.1s
 => => resolve docker.io/library/debian:buster-slim@sha256:845d301da51ad74998165a70de4196fb4a66e08316c59a4b8237e81a99ad22a2                    0.1s

arm和amd64都做了打包

根本原因不是很清楚,但是排查思路是要看打包日志观察问题解决

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值