docker-composeで起動したmysqlにコンテナホストからmysqlコマンドで接続する
自分向けのメモ程度の内容です。
ポイント
- docker-composeでコンテナホストのvolume/portをmappingする
- コンテナホストで
mysql
コマンドを使うときは--protocol=tcp
オプションをつける
雑な説明
docker-compose.ymlのサンプル
volumesとportsでmappingを定義。
version: '2' services: datastore: image: busybox volumes: - ./path/to/mount:/var/lib/mysql:rw container_name: datastore mysql: image: mysql environment: MYSQL_ROOT_PASSWORD: $DBROOT_PASS MYSQL_USER: $DBUSER MYSQL_PASSWORD: $DBUSER_PASS ports: - "127.0.0.1:3306:3306" container_name: mysql volumes_from: - datastore
mysql
コマンドの--protocol=tcp
オプション
MySQL :: MySQL 5.7 Reference Manual :: 5.2.2 Connecting to the MySQL Server
mysql
コマンドでlocalhostに接続しようとするとき、socketを使って通信しようとするらしい。
今回の場合、dockerでmysqldを起動しているためTCP接続を使って通信する必要があるため、protocolを明示的に指定する必要がある様子。
$ mysql -u $DBUSER -h localhost --protocol=tcp -p