コンテナの起動時間を節約するために、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 は現在、reqwest、tokio、tokio-postgres、sqlx などを含む Rust エコシステムのほとんどと正常に動作します。libpq と OpenSSL をまだ必要とする唯一の主要プロジェクトは Diesel です。diesel や libpq が必要ない場合:
OpenSSL から切り替えられるか確認してください。通常、Cargo.toml の機能を使用して依存関係に rustls を使用するように依頼します。
OpenSSL が必要ない場合は、cross build --target=x86_64-unknown-linux-musl --release を試して、libmusl 用にバイナリをクロスコンパイルしてください。これにより、より多くのプラットフォームがサポートされ、手間が少なくなります!