2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker環境のDB(MySQL)コンテナに接続する方法

Posted at

やりたいこと

Dockerで作成したDB(MySQL)コンテナに入ってデータベースをいじりたい。:frowning2:

ソースコード

長いので折りたたんでいます。

`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)

ちなみにホストとポート番号を確認すると...

         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に接続したい

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?