環境
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が外部(コンテナ)からの接続を受け入れるようにしておくことがキモです。