hirakiucの日記

いろいろ

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