Docker在Apple M1上构建Rust镜像失败。

3
我正在尝试在 MacBookPro M1 上构建一个 Docker 镜像,但每次都失败。该镜像基于官方的 Rust 镜像,目标是构建它,以便我可以在我的服务器上运行它,服务器使用的是 Ubuntu。
Dockerfile 文件:
FROM rust:1.59 as builder
WORKDIR /usr/src/auth-server

COPY . .
RUN cargo install --path .

FROM debian:buster-slim
WORKDIR /usr/app

COPY ./common/*.sh ./
RUN apt-get update && apt-get install -y default-mysql-client && rm -rf /var/lib/apt/lists/*
RUN chmod +x ./wait-for-it.sh ./wait-for-mysql.sh
COPY --from=builder /usr/local/cargo/bin/auth-server /usr/local/bin/auth-server

ENTRYPOINT [ "./wait-for-mysql.sh" ]
CMD ["auth-server"]


构建命令:
docker build auth-server -t ta_auth_server:latest --platform linux/x86_64

Cargo.toml:

[package]
name = "auth-server"
version = "0.1.0"
edition = "2018"

[dependencies]
actix-web          = "3.3.2"   # HTTP Server
actix-cors         = "0.5.4"   # HTTP Server CORS middleware
futures            = "0.3"     # Async Helpers
r2d2               = "0.8"     # SQL Connection Pool
jsonwebtoken       = "7.2.0"   # Authentication
ring               = "0.16.20" # Crypto
tracing            = "0.1.28"  # Logging
tracing-subscriber = "0.3"
toml               = "0.5.8"   # TOML Config
rust-argon2        = "1.0"   # Secure Password Hasher
rand               = "0.8"     # Secure Random
base64             = "0.13"    # Base 64 Encoder/Decoder
serde_json         = "1.0"     # Serial JSON

[dependencies.diesel]          # Database client
git = "https://github.com/diesel-rs/diesel"
rev = "c06aa5ed88d2670d6e0d68124a6b426f22ab5079" # 2.0.0
#version            = "1.4.8"
features = ["mysql", "chrono", "serde_json", "r2d2"]

[dependencies.serde]           # Serial
version = "1.0.130"
features = ["derive"]

[dependencies.chrono]          # UTC Time
version = "0.4"
features = ["serde"]

[dependencies.smallvec]        # Performat Vec
version = "1.6.1"
features = ["serde"]

构建输出:
#1 [internal] load build definition from Dockerfile
#1 sha256:6c3945f4e6a239ff4dfe37b0796b3f999128b83fc3b215f2886dbf03e20e2536
#1 transferring dockerfile: 37B 0.0s done
#1 DONE 0.0s

#2 [internal] load .dockerignore
#2 sha256:1caa71207477144555998e3d3648069c238cfe141a13e87658cf83476d0b1d8a
#2 transferring context: 34B done
#2 DONE 0.0s

#4 [internal] load metadata for docker.io/library/rust:1.59
#4 sha256:c2b8f0eec313f72bc7d2c52435b15771ad2e6be09ae47d3c2e0efe02283ca8fc
#4 DONE 1.0s

#3 [internal] load metadata for docker.io/library/debian:buster-slim
#3 sha256:9eff6dca560982b2e63ff856e62cbe563510aefae21ffbf5035ede9ce6b0ad90
#3 DONE 1.6s

#5 [stage-1 1/6] FROM docker.io/library/debian:buster-slim@sha256:fac2ae50be3f4e0901582e5c0ef00d06b1f599315a2077ab5b8ea7e304ddbee4
#5 sha256:b57f8a54c82b181481466e63f43b4243eb95be6efaf5095d58ab11aefda979cc
#5 DONE 0.0s

#11 [builder 1/4] FROM docker.io/library/rust:1.59@sha256:7c0ea3ee40fc4f12a43de1b9967bc5df1337bf469253c322a98952079493448b
#11 sha256:a97310b0b2f637acd07ecedbd207a8c9f5c5fa98a5eda098f441030d1a2a3446
#11 DONE 0.0s

#7 [internal] load build context
#7 sha256:d9a90ea0dce73a2dd2991c2f59f285a419d35192dba66861392823f655cc7cfb
#7 transferring context: 760B done
#7 DONE 0.0s

#12 [builder 2/4] WORKDIR /usr/src/auth-server
#12 sha256:1d5c76722440262694bbeca90924483cc0feb891d9d59c3c5721b6b36b982b45
#12 CACHED

#9 [stage-1 4/6] RUN apt-get update && apt-get install -y default-mysql-client && rm -rf /var/lib/apt/lists/*
#9 sha256:62d2853cc00902fa4338d0f296ef4921b4d2d7a356f805779e68bfcbbb79c89e
#9 CACHED

#6 [stage-1 2/6] WORKDIR /usr/app
#6 sha256:b743b8f0c2aa26b2111dd0c1092ffa4b9f29629158ed2b6e5a56c712ae2af991
#6 CACHED

#8 [stage-1 3/6] COPY ./common/*.sh ./
#8 sha256:2f9508b5b0a03c2c64132822174b78677547b0524012d1e45f351b2cd040a70f
#8 CACHED

#10 [stage-1 5/6] RUN chmod +x ./wait-for-it.sh ./wait-for-mysql.sh
#10 sha256:2dfd8162b6cefda29f9e9019846fab392ffa07eeafdcf546962645fc2edad05a
#10 CACHED

#13 [builder 3/4] COPY . .
#13 sha256:9455a328aff0e42274d134c73d12d65ee90822ff0e2ba4151132e1753f011c3f
#13 CACHED

#14 [builder 4/4] RUN cargo install --path .
#14 sha256:51e2661717978ed5209e1835d5f13955acd9066df77b3f2db3cd635ec199c2f2
#14 2.737   Installing auth-server v0.1.0 (/usr/src/auth-server)
#14 6.591     Updating crates.io index
#14 57.11 Killed
#14 ERROR: executor failed running [/bin/sh -c cargo install --path .]: exit code: 137
------
 > [builder 4/4] RUN cargo install --path .:
------
executor failed running [/bin/sh -c cargo install --path .]: exit code: 137

我认为它已经耗尽了内存,但我不知道为什么以及如何解决它。 有什么想法吗?


也许你可以发一下你的 Cargo.toml 文件? - Philippe
@Philippe Yep已发布。 - lhilgert
我收到了这个错误信息 error: failed to parse manifest at '/usr/src/auth-server/Cargo.toml' - Philippe
@Philippe 好奇怪。我以前从未遇到过这个错误。 - lhilgert
你有尝试过最新版本的 rust 吗?看看它是否可行? - Philippe
@Philippe 是的,但它也不起作用。 - lhilgert
1个回答

0

你应该使用为ARM架构构建的Rust镜像。您可以通过将Dockerfile中的基本映像更改为官方的ARM架构Rust映像来使用它:

FROM rust:1.59-slim-buster as builder

这个镜像是为ARM架构构建的,与M1芯片兼容。

一旦您进行了此更改,您可以使用相同的命令再次尝试构建该镜像:

docker build auth-server -t ta_auth_server:latest --platform linux/x86_64

我已经尝试过这种方式,但错误仍然相同。 - lhilgert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接