项目地址:
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都做了打包
根本原因不是很清楚,但是排查思路是要看打包日志观察问题解决