☰
rust docker用那个, rust在外编译完成
2026/10/3 17:00:26 网站建设 项目流程

Rust 在外边已经编译好了,Docker 里一般不需要再编译,只需要选一个运行镜像,把编译产物复制进去即可。

推荐选择

场景推荐基础镜像适合你的情况
普通动态链接二进制debian:bookworm-slim✅ 最稳,推荐
依赖 OpenSSL / 数据库 / Redis / HTTPSdebian:bookworm-slim✅ 最稳,推荐
musl 静态编译产物alpine:latest可以用
完全静态链接、无外部依赖scratch追求极致小体积

你之前遇到过:

error while loading shared libraries: libssl.so.1.1

这说明程序依赖系统动态库,所以不建议用scratch。
最稳妥的是:

debian:bookworm-slim

最推荐 Dockerfile

假设你本地已经编译好了:

target/release/main

Dockerfile 可以这样写:

FROM debian:bookworm-slim RUN apt-get update \ && apt-get install -y --no-install-recommends \ ca-certificates \ libssl3 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY target/release/main /app/main RUN chmod +x /app/main CMD ["/app/main"]

构建并运行:

docker build -t myapp . docker run --rm myapp

如果你想更小一点

如果你的二进制是用 musl 静态编译的,比如:

x86_64-unknown-linux-musl

可以用:

FROM alpine:latest WORKDIR /app COPY target/release/main /app/main RUN chmod +x /app/main CMD ["/app/main"]

但如果你的程序依赖libssl、libc、libcrypto等动态库,alpine可能会遇到兼容问题,因为它是musl libc。


判断你的二进制依赖什么

先执行:

ldd target/release/main

如果看到类似:

libssl.so.1.1 => not found libcrypto.so.1.1 => not found

说明它是动态链接的,建议用:

debian:bookworm-slim

如果看到:

statically linked

说明是静态链接,可以考虑:

alpine:latest

甚至:

scratch

最终建议

你现在这种“Rust 在外编译完成,再放进 Docker”的场景,优先用:

FROM debian:bookworm-slim

这是最稳的选择,兼容性最好,也不容易再遇到libssl.so.1.1这类问题。


你的程序需要连数据库和 Redis 吗?需要的话我把依赖它们的 apt 包也加到 Dockerfile 里。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询