😺
Docker環境のDB(MySQL)コンテナに接続する方法
やりたいこと
Dockerで作成したDB(MySQL)コンテナに入ってデータベースをいじりたい。
ソースコード
長いので折りたたんでいます。
docker-compose.yml
docker-compose.yml
#docker-compose.ymlのバージョン
version: "3.8"
#docker volumeの設定
volumes:
docker-volume:
#services以下に各コンテナの設定を書く
services:
#Webサーバーのコンテナ
web:
image: nginx:1.18
ports:
- "8000:80"
depends_on:
- app
volumes:
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
- .:/var/www/html
#アプリケーションのコンテナ
app:
build: ./docker/php
volumes:
- .:/var/www/html
#データベースのコンテナ
db:
image: mysql:5.7
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: db_name
MYSQL_USER: db_user
MYSQL_PASSWORD: db_password
MYSQL_ROOT_PASSWORD: root
TZ: "Asia/Tokyo"
volumes:
- docker-volume:/var/lib/mysql
# phpMyadominのコンテナ作成
phpmyadmin:
image: phpmyadmin/phpmyadmin
depends_on:
- db
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=db
- PMA_USER=db_user
- PMA_PASSWORD=db_password
ports:
- "8080:80"
volumes:
- ./docker/phpmyadmin/sessions:/sessions
.env
.env
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:8EM1Yt7LJjZSRaEjtdhXCVShJEI0GGo6FG6IZHXCuis=
APP_DEBUG=true
APP_URL=http://localhost:8000
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=db_name
DB_USERNAME=db_user
DB_PASSWORD=db_password
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=cookie
SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
試したこと
rootのパスワードを使っても接続できない。
terminal
$ docker-compose exec db bash
root@74539701c71c:/# mysql -u user -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
ちなみに$ docker-compose ps
でホストとポート番号を確認すると...
Name Command State Ports
--------------------------------------------------------------------------------
laravel_todo_api_app_1 docker-php-entrypoint Up 9000/tcp
php-fpm
laravel_todo_api_db_1 docker-entrypoint.sh Up 0.0.0.0:3306->3306/tcp
mysqld , 33060/tcp
laravel_todo_api_phpmy /docker-entrypoint.sh Up 0.0.0.0:8080->80/tcp
admin_1 apac ...
laravel_todo_api_web_1 /docker-entrypoint.sh Up 0.0.0.0:8000->80/tcp
ngin ...
解決法
$ mysql -h 127.0.0.1 -P 3306 -u root -p
ホストはlocalhost
と指定するとローカルマシンのmysql
ソケットを探しに行くのでエラーになる。
ポート番号の指定は大文字で-P
参考
参考にさせていただきました。ありがとうございました。
【Docker】コンテナ内のデータベース閲覧(ローカル,EC2)
docker内のMySQLに接続したい
Discussion