_NNN_
@_NNN_ (hehe hehe)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

[Laravel]php artisan migrateができない

解決したいこと

Laravel開発環境を構築しようと思い、php artisan migrateコマンドを実行しようとしてもエラーが出てしまい、DB接続しマイグレーションできない。

ファイル構成

root/
 ├ app(Laravelプロジェクト)
 ├ docker/
 │ └ Dockerfile
 └ docker-compose.yaml

エラー内容

  Illuminate\Database\QueryException 

  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (SQL: select * from information_schema.tables where table_schema = database and table_name = migrations and table_type = 'BASE TABLE')

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:712
    708▕         // If an exception occurs when attempting to run a query, we'll format the error
    709▕         // message to include the bindings with SQL, which will make this exception a
    710▕         // lot more helpful to the developer instead of just the database's errors.
    711▕         catch (Exception $e) {
  ➜ 712▕             throw new QueryException(
    713▕                 $query, $this->prepareBindings($bindings), $e
    714▕             );
    715▕         }
    716▕     }

      +36 vendor frames 
  37  artisan:37
      Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

内容

このエラー自体は.envファイルでの環境変数の記述ミスによるものらしいので、確かめてみても間違ってなく現在詰んでる状態です。

各種ソースコード

docker-compose.yaml
version: '3'
services:
  app:
    build: ./docker
    ports:
      - 80:80
    volumes:
      - ./app:/var/www/app
    working_dir: /var/www/app
  db:
    platform: linux/x86_64
    image: mysql:8.0
    ports:
      - 3306:3306
    environment:
      MYSQL_DATABASE: database
      MYSQL_USER: user
      MYSQL_PASSWORD: pass
FROM php:8.0-apache
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN apt-get update && apt-get install -y \
    git \
    && docker-php-ext-install pdo_mysql

RUN sed -i 's!/var/www/html!/var/www/app/public!g' /etc/apache2/sites-available/000-default.conf
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:2KXXtVvgGqOYcXbBP4nuRPKrDIEuLOtxcFbG/qbfGjc=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=user
DB_PASSWORD=pass

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DRIVER=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

MEMCACHED_HOST=127.0.0.1

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

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}"
0

1Answer

根本的なところですが、mysqlのコンテナは正常に稼働していますか?
docker compose ps等で確認されてはいかがでしょうか。

また、.envファイルは正しく読み込まれていますか?
アプリケーションでdumpなどして、host名などが正しいく設定されているか確認されてはいかがでしょうか。

0Like

Comments

  1. @_NNN_

    Questioner

    ```docker compose up```コマンドでステータスを確認していたところ```exit 1```となっておりどうやら税場に移動できていないようです。

    また```docker-compose logs```でログを確かめてみたところ```2022-01-21 02:40:05+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
    db_1 | You need to specify one of the following:
    db_1 | - MYSQL_ROOT_PASSWORD
    db_1 | - MYSQL_ALLOW_EMPTY_PASSWORD
    db_1 | - MYSQL_RANDOM_ROOT_PASSWORD
    ```
    と言う風なエラーが出てきていました。パスワードが設定されてないらしいですが、そもそもデータベース自体にアクセスができません。

    DBコンテナは一度は起動するのですがその後すぐに落ちてしまいます。

  2. では、そもそもmysqlのコンテナが起動できていないので接続できない状態のようですね。

    解決策としては、エラーメッセージの通りだと思います。
    環境変数「MYSQL_ROOT_PASSWORD」が必須となっているので、基本はそれを設定する必要があります。

    > This variable is mandatory and specifies the password that will be set for the MySQL root superuser account.

    Environment Variablesの項を参照してください。

    https://hub.docker.com/_/mysql
  3. @_NNN_

    Questioner

    「MYSQL_ROOT_PASSWORD」を追記し、もう一度コマンドを実行してみた所無事にデータベース接続できました。
    参考にしたところでは特にそのような記述はなかったので、記述してなかったのが悪かったようです。
    ありがとうございました。

Your answer might help someone💌