docker-compose環境でのmysql接続方法まとめ


前提

  • wsl2を使ったDocker環境
  • docker-composeでmysqlをPython flaskの環境を構築
  • flaskサーバからmysqlサーバに接続
  • wsl2のコマンドラインからmysqlを使用
docker-compose.yml
version: '3'
services: 
    db:
        image: mysql:8.0
        container_name: mysql_host
        ports:
            - "3306:3306" #<---wsl2から接続する場合に必要。flask_hostからの接続には不要
        environment: 
            MYSQL_ROOT_PASSWORD: secret
        volumes:
            - ./db/data:/var/lib/mysql
            - ./db/init:/docker-entrypoint-initdb.d
    flask:
        build: .
        container_name: flask_host
        ports:
            - "5000:5000"
        volumes:
            - .:/workspace:cached
        tty: true
        environment:
            TZ: Asia/Tokyo
        # command: flask run --host 0.0.0.0 --port 5000
$ docker-compose ps
     Name                   Command             State                 Ports
-----------------------------------------------------------------------------------------
mysql_host        docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp, 33060/tcp
sample1_flask_1   python3                       Up      0.0.0.0:5000->5000/tcp

接続方法まとめ

接続元 記述方法
flaskサーバからmysqlに接続 mysql_host
mysqlサーバのdocker hostnameを使用
wsl2からmysqlに接続 127.0.0.1
※.wslconfigに追記が必要
※localhostと記述するとmysql.sockを使って接続しようとするので接続できない
.wslconfig
[wsl2]
memory=2GB
swap=2GB
localhostForwarding=true

memory, swapの記述は、localhost接続とは関係ありません。