回答編集履歴

2

Debianリリースの違いについて追記しました

2024/07/30 00:23

投稿

tatsuya6502
tatsuya6502

スコア2055

test CHANGED
@@ -4,14 +4,22 @@
4
4
  app-1 | minimini_server: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
5
5
  ```
6
6
 
7
- おそらく、Cargo.tomlのsqlxのfeatureに、`tls-native-tls`、`runtime-tokio-native-tls`などを指定されているのではないかと思います。その場合、sqlxはMySQLサーバーに接続するときに、LinuxのOpenSSLライブラリーを使って、TLS(Transport Layer Security)通信ができないか試します。しかし、appコンテナーのイメージにOpenSSL(`libssl.so`)がインストールされてないためにエラーになっているようです。
7
+ おそらく、Cargo.tomlのsqlxのfeatureに、`tls-native-tls`、`runtime-tokio-native-tls`などを指定されているのではないかと思います。その場合、sqlxはMySQLサーバーに接続するときに、LinuxのOpenSSLライブラリーを使って、TLS(Transport Layer Security)通信ができないか試します。
8
8
 
9
- 解決方法の一つは、appコンテナーのイメージにOpenSSLブラリーをインストールことです。
9
+ ~~しかし、appコンテナーのイメージにOpenSSL(`libssl.so`)がインストールされてないためにエラーになっていようです。~~
10
10
 
11
- が、別の解決方法として、OpenSSLライブラリーを使わずに、rustlsというRustで実装されたTLSラブラリを使う方法があります。以下のように、sqlxのfeatureに`tls-rustls`を指定してみてください。
11
+ ~~解決方法の一つはappコンテナーのイメージにOpenSSLライブラリーをインストることです~~
12
+
13
+ しかし、ミニサーバーのビルド時に使ったものと **同じ** OpenSSL(`libssl.so`)がappコンテナーのイメージにインストールされてないためにエラーになっているようです。ビルド時のイメージとして`rust:1.80`を使われていますが、これはDebian Bookwormのイメージをベースにしているようです([Dockerfile](https://github.com/rust-lang/docker-rust/blob/7932cc837034e38e33566d7c4df0304314e7279f/1.80.0/bookworm/Dockerfile)) 一方、実行用のイメージにはDebian Buster(`debian:buster-slim`)が使われています。多分ですが、Debianのリリースが異なるので、インストールされるOpenSSLのバージョンに互換性がないのかなと思います。
14
+
15
+ 実行用のイメージを`debian:bookworm-slim`に変えると解決するかもしれません。(ちなみにDebian Busterは先月2024年6月末でサポートが切れていますので、使わない方がいいです)
16
+
17
+ また、別の解決方法として、OpenSSLライブラリーを使わずに、rustlsというRustで実装されたTLSライブラリーを使う方法があります。ビルド時と実行時のDebianのバージョン違いの影響を受けにくくなるので、個人的にはこちらをおすすめします。
18
+
19
+ 以下のように、sqlxのfeatureに`tls-rustls`を指定してみてください。
12
20
 
13
21
  ```toml
14
- // Cargo.toml
22
+ # Cargo.toml
15
23
 
16
24
  [dependencies]
17
25
  sqlx = { version = "0.8.0", features = ["mysql", "runtime-tokio", "tls-rustls", ...略...] }

1

参考リンクを追加しました

2024/07/29 15:31

投稿

tatsuya6502
tatsuya6502

スコア2055

test CHANGED
@@ -16,3 +16,5 @@
16
16
  [dependencies]
17
17
  sqlx = { version = "0.8.0", features = ["mysql", "runtime-tokio", "tls-rustls", ...略...] }
18
18
  ```
19
+
20
+ - 参考: https://docs.rs/sqlx/0.8.0/sqlx/#tls-support