為了節省容器啟動時間,準備把 rust 寫的 api 編譯好後扔進 docker 裡,於是編譯到 target
然後 openssl 炸了,不認 libssl-dev 了,查了下要重新編譯。。。
但是,我們發現了一個神奇的 docker 鏡像https://github.com/emk/rust-musl-builder,它已經配好了 openssl 的 musl 環境
於是只要這樣:
alias rust-musl-builder='docker run --rm -it -v "$(pwd)":/home/rust/src ekidd/rust-musl-builder'
rust-musl-builder cargo build --release
就可以了
(不過好像也可以把 openssl 換成 rustls 來解決)
不過,rustls 現在與大多數 Rust 生態系統良好兼容,包括 reqwest、tokio、tokio-postgres、sqlx 等許多其他項目。唯一仍然需要 libpq 和 OpenSSL 的主要項目是 Diesel。如果你不需要 diesel 或 libpq:
查看是否可以切換 away from OpenSSL,通常通過在 Cargo.toml 中使用功能請求你的依賴項使用 rustls 代替。
如果你不需要 OpenSSL,嘗試 cross build --target=x86_64-unknown-linux-musl --release 來為 libmusl 交叉編譯你的二進制文件。這支持更多平台,麻煩更少!