MariaDBを動かしているDockerコンテナに別のコンテナから接続をしたら、以下のエラーが発生しました。
root@a90917286208:/# mysql -h mariadb
ERROR 2002 (HY000): Can't connect to MySQL server on 'mariadb' (115)
MariaDBの設定項目にはbind-addressというものがあり、指定した接続元のみアクセスを許可することができるようです。
初期設定では、127.0.0.1 からの接続のみが許可されています。
ウチイダのコンテナでは、/etc/mysql/mariadb.conf.d/50-server.cnf に設定がありました。
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /run/mysqld/mysqld.pid
socket = /run/mysqld/mysqld.sock
#port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
#skip-external-locking
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address = 127.0.0.1 # <- 初期設定されているので、コメントアウト
~ (以下略) ~
設定を変更して、Mariadb を再起動します。
再度、接続しなおしてみます。
root@a90917286208:/# mysql -h mariadb
ERROR 1698 (28000): Access denied for user 'root'@'app'
エラー内容が ERROR 1698 に変わりました。
MariaDBのcliは、指定しないとrootユーザーで接続を試みます。
初期設定ではrootはlocalhostからのみ接続を許可するので、権限がないためエラーになっています。
MariaDBのuser テーブルに、外部ホストからの接続を許可するユーザーを作成します。
CREATE USER 'app-user'@'app' IDENTIFIED BY 'app-user-password';
GRANT ALL PRIVILEGES ON appdb.* TO 'app-user'@'app' WITH GRANT OPTION;
新たに作成し他ユーザーを指定して接続してみます。
root@a90917286208:/# mysql -h mariadb -u appuser -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.29-MariaDB-0+deb10u1 Debian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
MariaDBに、外部から接続することができました。
Dockerを利用する場合、MySQL のイメージを使えば最初から良い感じに設定してくれているようなので、通常はあまりつまづくことのない問題かと思いますが…
以上です。あなたのお役に立てればうれしいです。
最近のコメント