質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

3347閲覧

dockerを使用し、Laravelの開発環境を作成した際に''php artisan migrate''を実行した際のエラー

SanQ

総合スコア92

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/07/31 06:42

編集2020/07/31 06:44

#開発環境

ツールバージョン
Debian GNU/Linux 10 (buster)10 (buster)
MySQL10.3.22-MariaDB-0+deb10u1
PHP7.4.8
Laravel7.12.0

Debian GNU/Linux 10 (buster)はUbuntu(18.04)とほぼ同じ構成であり、ubuntuで使用するコマンドもubuntuと同じように使用できています。

#困っていること
dockerでLaravelの開発環境を作成しています。
php artinsan migrateでデータベースを作成しようとしたところ、エラーが発生して作成できませんでした。自分と同じようなエラーが出た時の対処法を調べ、その方法を試してみましたがそのエラーが解決できませんでした。
どうしたらphp artisan migrateを実行できるようになるのかアドバイスを頂きたいです。

#自分のコード

Dockerfile

1 FROM ubuntu:18.04 2 FROM php:7.4-apache 3 4 ENV DEBIAN_FRONTEND=noninteractive 5 6 RUN apt-get -y update && apt-get -y upgrade 7 RUN apt-get -y install default-mysql-server default-mysql-client 8 RUN apt-get install -y tzdata 9 RUN apt-get -y update 10 RUN apt-get -y install vim 11 12 EXPOSE 80 13 14 ONBUILD ADD web-test.tar /var/www/html/

Laravelのenvファイル

env

1DB_CONNECTION=mysql 2DB_HOST=127.0.0.1 3DB_PORT=3306 4DB_DATABASE=laravel 5DB_USERNAME=root 6DB_PASSWORD=

php.ini(一部抜粋)

~省略~ ;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions ; ;;;;;;;;;;;;;;;;;;;;;; ;extension=bz2 ;extension=curl ;extension=ffi ;extension=ftp ;extension=fileinfo ;extension=gd2 ;extension=gettext ;extension=gmp ;extension=intl ;extension=imap ;extension=ldap ;extension=mbstring ;extension=exif ; Must be after mbstring as it depends on it ;extension=mysqli ;extension=oci8_12c ; Use with Oracle Database 12c Instant Client ;extension=odbc ;extension=openssl ;extension=pdo_firebird ;extension=pdo_mysql ;extension=pdo_oci ;extension=pdo_odbc ;extension=pdo_pgsql ;extension=pdo_sqlite ;extension=pgsql ;extension=shmop ;extension=soap ;extension=sockets ;extension=sodium ;extension=sqlite3 ;extension=tidy ;extension=xmlrpc ;extension=xsl ~省略~ ;;;;;;;;;;;;;;;;;;; ; Module Settings ; ;;;;;;;;;;;;;;;;;;; [Pdo] ;pdo_odbc.connection_pooling=strict ;pdo_odbc.db2_instance_name [Pdo_mysql] pdo_mysql.default_socket= [MySQLi] mysqli.max_persistent = -1 ;mysqli.allow_local_infile = On mysqli.allow_persistent = On mysqli.max_links = -1 mysqli.default_port = 3306 mysqli.default_socket = mysqli.default_host = mysqli.default_user = mysqli.default_pw = mysqli.reconnect = Off [mysqlnd] mysqlnd.collect_statistics = On mysqlnd.collect_memory_statistics = On ;mysqlnd.debug = ;mysqlnd.log_mask = 0 ;mysqlnd.mempool_default_size = 16000 ;mysqlnd.net_cmd_buffer_size = 2048 ;mysqlnd.net_read_buffer_size = 32768 ;mysqlnd.net_read_timeout = 31536000 ;mysqlnd.sha256_server_public_key = ~省略~

#エラー文とそれを踏まえて自分が行ったこと
最初にphp artisan migrateを行った時、このようなエラーが発生しました。

terminal

1 Illuminate\Database\QueryException 2 3 could not find driver (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE') 4 5 at vendor/laravel/framework/src/Illuminate/Database/Connection.php:671 6 667| // If an exception occurs when attempting to run a query, we'll format the error 7 668| // message to include the bindings with SQL, which will make this exception a 8 669| // lot more helpful to the developer instead of just the database's errors. 9 670| catch (Exception $e) { 10 > 671| throw new QueryException( 11 672| $query, $this->prepareBindings($bindings), $e 12 673| ); 13 674| } 14 675| 15 16 +34 vendor frames 17 35 artisan:37 18 Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

そこで下の記事を参考にphp.iniの一部を変更しました。
Laravel7 「php artisan migrate」実行時にエラー「could not find driver」が発生した場合の対処法

変更内容は

;extension=pdo_mysql ↓ extension=pdo_mysql

変更後再びphpコマンドを実行すると

terminal

1PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo_mysql (/usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo_mysql: cannot open shared object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo_mysql.so (/usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo_mysql.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 2 3Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo_mysql (/usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo_mysql: cannot open shared object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo_mysql.so (/usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo_mysql.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

という新たなエラーが発生し、php artisan migrateのエラーも解決されませんでした。
tarminalのエラーにある(/usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo_mysql.so: cannot open shared object file: No such file or directory)からpdo_mysql.soファイルがないことでこのエラーが出ているのかなと思い、pdo_mysql.soをインストールする方法を探してみたのですが、解決方法が見つかりませんでした。(PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql'で検索をかけると同じような事例はあったのですが、試してもダメだったり、Dockerfileの構成が自分のものとかなり違うので試せなかったものしか見当たりませんでした。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PHP の公式イメージで pdo_mysql を使うときは、次のようにするようです:

dockerfile:Dockerfile

1FROM php:7.4-apache 2RUN docker-php-ext-install pdo pdo_mysql

参考: PDO MySQL driver not found · Issue #62 · docker-library/php

投稿2020/07/31 07:05

y_shinoda

総合スコア3272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SanQ

2020/07/31 14:43

解答ありがとうございます。 さっそく''RUN apt-get -y install default-mysql-server default-mysql-client''を''UN docker-php-ext-install pdo pdo_mysql''に変えてコンテナを作成したところ、/etc/の中にmysqlがなくて、mysqlコマンドが使用できませんでした。 これは上の二つは同時に実行した方が良いということでしょうか?
y_shinoda

2020/07/31 14:51

両方実行する必要があります RUN docker-php-ext-install pdo pdo_mysql は、PHP から mysql を使えるようにするだけで、 mysql コマンドは mysql クライアントがインストールされていないと使えません。 また、MySQL サーバーもインストールされていなければ データベースにも接続できません。
SanQ

2020/07/31 15:03

両方のコマンドを実行することで、mysqlへ接続することができました!本当にありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問