回答編集履歴
2
Debianリリースの違いについて追記しました
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)通信ができないか試します。
|
7
|
+
おそらく、Cargo.tomlのsqlxのfeatureに、`tls-native-tls`、`runtime-tokio-native-tls`などを指定されているのではないかと思います。その場合、sqlxはMySQLサーバーに接続するときに、LinuxのOpenSSLライブラリーを使って、TLS(Transport Layer Security)通信ができないか試します。
|
8
8
|
|
9
|
-
|
9
|
+
~~しかし、appコンテナーのイメージにOpenSSL(`libssl.so`)がインストールされてないためにエラーになっているようです。~~
|
10
10
|
|
11
|
-
|
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
|
-
|
22
|
+
# Cargo.toml
|
15
23
|
|
16
24
|
[dependencies]
|
17
25
|
sqlx = { version = "0.8.0", features = ["mysql", "runtime-tokio", "tls-rustls", ...略...] }
|
1
参考リンクを追加しました
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
|