質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

574閲覧

実行環境のdocker-composeのmysqlでlibssl.so.3がないと言われる

asobinin20

総合スコア1

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2024/07/29 12:12

編集2024/07/29 14:45

Rustのsqlx+mysql+axumで簡単なTodoの表示と追加のみを行うミニサーバーをDocker上で動かしたいのですが、うまくいきません。
開発環境ではDBのみをDockerで動かしていましたが、問題なく動作しました。しかし、実行環境でapp+DBを動作させると、MySQLのログに次のように表示されてしまいます。どのように修正すればよいのか分からない状態です。助けていただけませんか?
現在の状況は以下の通りです。

ログ

✔ Container minimini_server-db-1 Recreated 7.2s ✔ Container minimini_server-app-1 Recreated 2.7s Attaching to app-1, db-1 db-1 | 2024-07-29 14:42:38+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.39-1.el9 started. db-1 | 2024-07-29 14:42:38+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' db-1 | 2024-07-29 14:42:38+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.39-1.el9 started. db-1 | '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock' db-1 | 2024-07-29T14:42:39.076574Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead. db-1 | 2024-07-29T14:42:39.079308Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.39) starting as process 1 db-1 | 2024-07-29T14:42:39.104690Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. app-1 | minimini_server: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory app-1 exited with code 127 db-1 | 2024-07-29T14:42:47.060449Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. db-1 | 2024-07-29T14:42:51.337683Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. db-1 | 2024-07-29T14:42:51.337764Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. db-1 | 2024-07-29T14:42:51.420835Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. db-1 | 2024-07-29T14:42:51.445847Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock db-1 | 2024-07-29T14:42:51.446114Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.39' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. Gracefully stopping... (press Ctrl+C again to force)

構成
イメージ説明

.env

MYSQL_ROOT_PASSWORD=1234 MYSQL_DATABASE=minimini MYSQL_USER=asobi MYSQL_PASSWORD=5678 # DATABASE_URL=mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@127.0.0.1:3306/${MYSQL_DATABASE}

Dockerfile.prod

FROM rust:1.80 AS builder WORKDIR /usr/src/app COPY . . ENV SQLX_OFFLINE=true RUN cargo build # FROM debian:buster-slim RUN apt-get update && apt-get install -y libssl-dev ca-certificates && rm -rf /var/lib/apt/lists/* COPY --from=builder /usr/src/app/target/debug/minimini_server /usr/local/bin/minimini_server EXPOSE 3000 CMD [ "minimini_server" ]

compose.prod.yml

services: app: build: context: . dockerfile: Dockerfile.prod env_file: - ./.env ports: - "3000:3000" networks: - app-network depends_on: - db db: image: mysql:8.0 env_file: - ./.env ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql networks: - app-network volumes: mysql-data: networks: app-network: driver: bridge

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsuya6502

2024/07/29 14:17

> MySQLのログに次のように表示されてしまいます 肝心のログが載っていないため回答が難しいです。質問を編集して追記してもらえますか?
asobinin20

2024/07/29 14:46

失礼しました、失念しておりました・・・
guest

回答1

0

ベストアンサー

appコンテナー上のRust製のミニサーバーがエラーを出していますね。

console

1app-1 | minimini_server: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory

おそらく、Cargo.tomlのsqlxのfeatureに、tls-native-tlsruntime-tokio-native-tlsなどを指定されているのではないかと思います。その場合、sqlxはMySQLサーバーに接続するときに、LinuxのOpenSSLライブラリーを使って、TLS(Transport Layer Security)通信ができないか試します。

しかし、appコンテナーのイメージにOpenSSL(libssl.so)がインストールされてないためにエラーになっているようです。

解決方法の一つは、appコンテナーのイメージにOpenSSLライブラリーをインストールすることです。

しかし、ミニサーバーのビルド時に使ったものと 同じ OpenSSL(libssl.so)がappコンテナーのイメージにインストールされてないためにエラーになっているようです。ビルド時のイメージとしてrust:1.80を使われていますが、これはDebian Bookwormのイメージをベースにしているようです(Dockerfile) 一方、実行用のイメージにはDebian Buster(debian:buster-slim)が使われています。多分ですが、Debianのリリースが異なるので、インストールされるOpenSSLのバージョンに互換性がないのかなと思います。

実行用のイメージをdebian:bookworm-slimに変えると解決するかもしれません。(ちなみにDebian Busterは先月2024年6月末でサポートが切れていますので、使わない方がいいです)

また、別の解決方法として、OpenSSLライブラリーを使わずに、rustlsというRustで実装されたTLSライブラリーを使う方法があります。ビルド時と実行時のDebianのバージョン違いの影響を受けにくくなるので、個人的にはこちらをおすすめします。

以下のように、sqlxのfeatureにtls-rustlsを指定してみてください。

toml

1# Cargo.toml 2 3[dependencies] 4sqlx = { version = "0.8.0", features = ["mysql", "runtime-tokio", "tls-rustls", ......] }

投稿2024/07/29 15:28

編集2024/07/30 00:23
tatsuya6502

総合スコア2055

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asobinin20

2024/07/30 00:45 編集

ご回答ありがとうございます。 色々試しましたが、debian:bookworm-slimを使用し、featuresをruntime-tokio-rustlsにすることでdb、app共に起動できました!
tatsuya6502

2024/07/30 00:43

解決してよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問