在 Mac 上构建跨平台 Rust Docker Image 时遇到问题

48 天前
 beneo

我在尝试在我的 Mac 机器上创建一个 Rust 项目的 Docker 镜像,并希望能够在 x86_64 架构的 Linux 机器上运行它。我已经尝试了几天,但仍然无法成功构建镜像。下面是我的 Dockerfile:


WORKDIR /usr/src/hello-rust

# Install dependencies including gcc, and then create a symbolic link if necessary
RUN apk update && \
    apk add --no-cache musl-dev openssl-dev pkgconf build-base openssl gcc && \
    # If creating a symbolic link is necessary, uncomment the following line:
    ln -s /usr/bin/gcc /usr/bin/x86_64-linux-gnu-gcc

ENV OPENSSL_LIB_DIR=/usr/lib \
    OPENSSL_INCLUDE_DIR=/usr/include \
    PKG_CONFIG_ALLOW_CROSS=1 \
    OPENSSL_STATIC=true

COPY . .

RUN cargo build --release --target=x86_64-unknown-linux-gnu

FROM alpine:3.19

RUN apk add --no-cache libgcc openssl

WORKDIR /root/

COPY --from=builder /usr/src/hello-rust/target/release/hello-rust .

EXPOSE 9007

CMD ["./hello-rust"]

实话说,我就是一个 hello rust ,主要是 Dockerfile 追求最小 size 的镜像,所以用了 alpine ,查了很多资料,你们也可以看到我的 Dockerfile 也是 GPT4 改的,我也是才知道 Mac 到 Linux 有个 x86_64-unknown-linux-gnu ,但是一直没有配置好,请大神指点。

654 次点击
所在节点    Rust
3 条回复
rrfeng
48 天前
怎么个无法成功法,至少给个报错信息吧……
DsuineGP
48 天前
- 如果运行时镜像非得用 alpine, 那么编译时镜像建议使用 x86_64-unknown-linux-musl 工具链, 例如 rust:1.77.1-alpine3.19. 依赖项中使用 rusttls 替换 openssl, 开启静态链接.
- 如果不是的话, 编译器镜像用 x86_64-linux-gnu-gcc 工具链, 例如 rust:1.77.1-buster, 运行时镜像用 debian:buster-slim, 使用 apt install openssl

需要注意的是, 使用 c/c++/rust 的程序, 编译时的环境和运行时的环境时强相关的
beneo
48 天前
@DsuineGP 懂哥啊,GPT 都搞不定还得是过来人,我试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1029068

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX