LoginSignup
13

More than 5 years have passed since last update.

dockerコンテナからローカルのMySQLを使う場合にすること

Posted at

環境

Mac OS Sierra バージョン 10.12.6

MySQLはbrewでインストール Server version: 5.7.18 Homebrew

Docker

docker-compose.yml

このAPIコンテナからローカルのMySQLにつなぎたい

version: "3"
services:
  web:
    build:
      context: ./web
    container_name: web
    command: npm start
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
    volumes:
      - ./web:/home/web
  api:
    build:
      context: ./api
    container_name: api
    command: npm start
    ports:
      - "3010:3010"
    environment:
      - NODE_ENV=development

    volumes:
      - ./api:/home/api
  nginx:
    build:
      context: ./nginx
    container_name: nginx
    ports:
      - "8080:80"
      - "443:443"
    environment:
      - NODE_ENV=development

Macですること

Aliasをきる

sudo ifconfig lo0 alias 10.200.10.1/24

MySQLですること

外部からのアクセスを許可するため、bind-addressの設定をすること
外部からのアクセスができるユーザーを作成すること

  • my.cnf
bind-address = 10.200.10.1
  • my.cnfの罠にはまらないように

どのファイルを読み込んでいるかをみる。

$ mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

/etc/my.cnfから、順に読み込まれていくが上書きされてしまうので、最優先が ~/.my.cnfだったりする。
/etc/my.cnfに書いていた設定が、/usr/local/etc/my.cnfの設定でうわが枯れてしまってハマりました。

  • MySQL自動起動設定を一度止めておいた方がいいかも

落としたのに、蘇っている。。。とかある

 brew services stop mysql
  • 外部からアクセスできるユーザーを作成すること
GRANT ALL ON *.* TO user@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

APIですること

hostとユーザー名を上記で設定したのにすること

module.exports = {

  development: {
    client: 'mysql',
    connection: {
      host : '10.200.10.1',
      database: 'test_db',
      user:     'user',
      password: 'password'
    },
    pool: {
      min: 2,
      max: 5
    },
    migrations: {
      tableName: 'knex_migrations'
    }
  },

余談

bind-address=0.0.0.0でもいけるかも
自分の環境ではmy.cnfにその設定を入れると起動しなかったので、上記のようにしています。

要は、MySQLが外部(コンテナ)からの接続を受け入れるようにしておくことがキモです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13