1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker 環境で MySQL 8.4 × MariaDB Client を使っていたら TLS エラーが出るようになった話と対処法

Posted at

概要

PHP コンテナと MySQL コンテナを Docker で管理している環境で、
特に設定を変えていないのに、ある日突然 MySQL 接続時にエラーが出るようになった。

調べてみると、下記構成になっていることが原因でした。

  • DB サーバー側は MySQL 8.4
  • クライアント側(PHP コンテナの mysql コマンド)は MariaDB Client

これにより、MySQL 側が自己署名証明書付きの TLS を有効化したことで、MariaDB Client 側が弾かれるようになっていた。

同じ構成の人がハマりそうなので、対応方法をメモとして残します。

環境

DB サーバー(コンテナ)

  • MySQL 8.4.7

Client サーバー(コンテナ)

  • PHP 8.2 (php-fpm)
  • MariaDB Client 11.8

※ PHP コンテナ内で mysql コマンドを実行すると、MariaDB Client が使われている状態。

エラーの内容

Laravel の migration / schema load 実行時に、以下のエラーが発生。

Symfony\Component\Process\Exception\ProcessFailedException 

The command "mysql  --user="${:LARAVEL_LOAD_USER}" --password="${:LARAVEL_LOAD_PASSWORD}" --host="${:LARAVEL_LOAD_HOST}" --port="${:LARAVEL_LOAD_PORT}" --database="${:LARAVEL_LOAD_DATABASE}" < "${:LARAVEL_LOAD_PATH}"" failed.

Exit Code: 1(General error)

Working directory: /var/www

Output:
================

Error Output:
================
ERROR 2026 (HY000): TLS/SSL error: self-signed certificate in certificate chain

at vendor/symfony/process/Process.php:269

対応方法(開発環境)

結論

MariaDB Client 側で SSL を無効化する。
そのために、my.cnf を用意して conf.d に配置します。

my.cnf の内容

[client]
ssl=0

MariaDB Client では、この指定で TLS を完全に無効化できます。

Dockerfile

例:PHPコンテナのDockerfile

FROM php:8.2-fpm

ENV TZ=Asia/Tokyo
COPY php.ini /usr/local/etc/php/

RUN apt-get update \
    && apt-get install -y zlib1g-dev libzip-dev mariadb-client libpng-dev unzip libicu-dev

# MariaDB/MySQL client config (dev): disable TLS so `mysql` CLI won't fail on self-signed certs
COPY my.cnf /etc/mysql/conf.d/zz-client.cnf
RUN chmod 644 /etc/mysql/conf.d/zz-client.cnf

RUN docker-php-ext-install zip pdo_mysql gd intl

# Composer install
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin

WORKDIR /var/www

RUN composer global require "laravel/installer"

ポイント

  • /etc/mysql/my.cnf は パッケージインストール時に上書きされることがある
  • /etc/mysql/conf.d/*.cnf は確実に読み込まれる
  • zz- プレフィックスを付けて、後勝ちにしている
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?