Dockerコンテナ上のMariaDBにホスト側から接続する

MariaDB には mysql コマンドで接続できるはずだけど、Docker コンテナに乗ってるときには追加のオプションが必要だったので、メモしておく。

docker-compose.yml はこんなの。

version: "3"

services:

  db:
    image: mariadb:10.5.6-focal
    container_name: test-db
    restart: always
    ports:
      - 8802:3306
    volumes:
      - ./mysql:/var/lib/mysql
      - ./initdb.d:/docker-entrypoint-initdb.d
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=test
      - MYSQL_USER=test
      - MYSQL_PASSWORD=test
      - BIND-ADDRESS="0.0.0.0"
    tty: true

コンテナを起動する。

takatoh@apostrophe:test$ docker-compose up -d

で、ポート 8802 に繋いであるんだからそれを指定してやればいいんだろうと、次のようにやったらダメだった。ポートを指定してるのにソケットがないと怒られる。

takatoh@apostrophe:test$ mysql -u root -p -P 8802
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

解決策は簡単に見つかった。次のようにすればいい。

takatoh@apostrophe:test$ mysql -u root -p -h localhost -P 8802 --protocol tcp

--protocol オプションで tcp を使うってことを明示する。-h オプションはなくても大丈夫だった。多分ほかの PC から接続するときには必要なんだろう。