はじめに
podmanを利用して、MySQLコンテナーを立ち上げそこにホストPCからMySQLクライアントで接続したかったのだが、詳しい文献が見つからず四苦八苦したので、この手順を記しておく。
以下環境。
- macOS Monterey 12.6
- Podman(以下)
Client: Podman Engine
Version: 4.3.0
API Version: 4.3.0
Go Version: go1.18.7
Built: Wed Oct 19 02:55:57 2022
OS/Arch: darwin/amd64
Server: Podman Engine
Version: 4.2.1
API Version: 4.2.1
Go Version: go1.18.5
Built: Thu Sep 8 04:58:19 2022
OS/Arch: linux/amd64
手順
イメージ取得
MySQLサーバーのみでよいので、mysql-server
を取得している。
% podman pull mysql/mysql-server:5.7
確認。
% podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql/mysql-server 5.7 63d5ef161926 13 days ago 491 MB
コンテナー起動
コンテナーを起動する。
root
ユーザーのパスワードをMYSQL_ROOT_PASSWORD
で指定、ホストPCの3306
番ポートをコンテナーの3306
に転送するように指定している。
% podman run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=XXXXXXXX --name mysql-server mysql-server:5.7
確認。
% podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08cd2ff91f1d docker.io/mysql/mysql-server:5.7 mysqld 10 minutes ago Up 10 minutes ago (healthy) 0.0.0.0:3306->3306/tcp mysql-server
MySQLユーザーの追加
コンテナーのMySQLクライアントで接続。
% podman exec -it mysql-server mysql -hlocalhost -uroot -p
接続先任意のroot
ユーザーを作成、権限付与。その後切断。
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'XXXXXXXX';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
mysql> FLUSH PRIVILEGES;
mysql> quit
ホストPCから接続
ホストPCから接続するには以下のコマンドで。
% mysql -h127.0.0.1 -P3306 -uroot -p
ちなみに、以下のコマンドのようなlocalhost
だと、MySQLはUnixSocket使用しようとするらしくNG。--protocol=tcp
を指定すればOK。
% mysql -hlocalhost -P3306 -uroot -p (→NG)
% mysql -hlocalhost -P3306 -uroot --protocol=tcp -p (→OK)