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

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

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

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

Laravel

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

Docker

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

Q&A

解決済

1回答

2754閲覧

Dockerコンテナ内でphp artisan migrateを実行したらエラーになる

gomiobake666

総合スコア6

MySQL

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

Laravel

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

Docker

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

0グッド

0クリップ

投稿2021/08/19 11:22

編集2021/08/19 13:51

https://qiita.com/tatema/items/9a541553058fdd7fd6a7

Dockerの構成はこちらです。

プロジェクト名 ├── Docker/ │ ├── App/ │ │ ├ 000-default.conf │ │ ├ Dockerfile │ │ └ php.ini │ └── DB/ │ ├ my.cnf │ └ volume/ │ ├── src/ └── docker-compose.yml

上記の記事を見ながらDockerで環境構築をしたいと思っています。
上記の記事の手順通りLaravelのインストールの手順までは何も問題なく進むのですがLaravelインストール後の「DBの設定をし、接続する。」のコンテナに入りプロジェクトファイルに移動して「php artisan migrate」を実行しようとしたところ

Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE') at /var/www/html/okodukaiapp/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669 665| // If an exception occurs when attempting to run a query, we'll format the error 666| // message to include the bindings with SQL, which will make this exception a 667| // lot more helpful to the developer instead of just the database's errors. 668| catch (Exception $e) { > 669| throw new QueryException( 670| $query, $this->prepareBindings($bindings), $e 671| ); 672| } 673| Exception trace: 1 PDOException::("SQLSTATE[HY000] [2002] Connection refused") /var/www/html/okodukaiapp/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=laravel", "root", "", []) /var/www/html/okodukaiapp/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 Please use the argument -v to see more details.

上記のようなエラーが出て実行することができません。

試したこと

実行がうまくいかなったため一度MySQLサーバに入ろうとためしコンテナ内に入り

mysql -uroot -p

と実行したところ

bash: mysql: command not found

なってしまい実行することができませんでした。

コマンドが見つからないということはMySQLがうまく導入できていないということでしょうか?

初心者のためご教授いただけると幸いです。

使用しているファイル等を記載しておきます。

↓docker-compose.ymlファイル

# docker-composeで使用するバージョンを定義しています。 version: '3' # アプリケーションを動かすための各要素のこと。servicesの中に、app、db、phpmyadminが子要素として設定されています。 services: # laravelを動かすコンテナがここから下に記載されています。 app: #コンテナの名前をここで決めます。 container_name: okodukai_app # どのポートを繋ぐかという設定です。ホストの8080番ポートとコンテナの80番をつないでいる。80番ポートのバーチャルホストは000-default.confにて設定済みです。 ports: - "8000:80" # Dockerfileの設定の場所を指定しています。Dockerfileの内容に基づいてビルドします。 build: ./Docker/App # コンテナとホスト側のディレクトリを同期する場所をここで指定しています。ここにlaravelのソースが入ります。 volumes: - ./src:/var/www/html # MySQLを動かすコンテナがここから設定されています。 db: #Docker HubからMySQL5.7の公式イメージを引っ張ってくる設定です。 image: mysql:5.7 # コンテナ名を指定しています。 container_name: okodukai_db # MySQLのコンテナ内の環境変数を指定しています。任意のものを設定してください。 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: okodukai_db MYSQL_USER: dbuser MYSQL_PASSWORD: dbpass TZ: 'Asia/Tokyo' # 起動時のコマンドになります。 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # ディレクトリの同期をしています。ここを書かないとコンテナを閉じたときにデータベースからデータがなくなるので注意してください。詳しくはdocker 永続化などと調べると良いかもです。 volumes: - ./Docker/DB/volume:/var/lib/mysql - ./Docker/DB/my.cnf:/etc/mysql/conf.d/my.cnf # ホストの13306番ポートとコンテナのなかの3306番ポートとつなげる設定です。 ports: - 13306:3306 # phpmyadminの設定が書きに記載します。 phpmyadmin: #コンテナ名を決めています。 container_name: phpmyadmin #DockerHubからphpmyadminのイメージを引っ張ってくる設定です。 image: phpmyadmin/phpmyadmin #phpmyadminの環境変数の設定です。MySQLの設定を参照して記載してください。PMA_HOSTSにはservicesのdbを指定しています。 environment: - PMA_ARBITRARY=1 - PMA_HOSTS=db - PMA_USER=root - PMA_PASSWORD=root ports: - 3000:80

↓Dockerfile

FROM php:7.4-apache ADD php.ini /usr/local/etc/php/ ADD 000-default.conf /etc/apache2/sites-enabled/ RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer RUN apt-get update \ && apt-get install -y \ git \ zip \ unzip \ vim \ libpng-dev \ libpq-dev \ && docker-php-ext-install pdo_mysql RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled RUN /bin/sh -c a2enmod rewrite

↓000-default.conf

<VirtualHost *:80> ServerAdmin laravel@localhost DocumentRoot /var/www/html/okodukaiapp/public ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/html/okodukaiapp/public> AllowOverride All </Directory> </VirtualHost>

↓php.ini

[Date] date.timezone = "Asia/Tokyo" [mbstring] default_charset = "UTF-8" mbstring.language = "Japanese"

↓my.cnf

[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set=utf8mb4

追記

Laravelのenvファイルを変更していなかったため、docker-compose.ymlで定義した名に変更してもう一度

php artisan migrate

を実行しましたが上記と同じエラーが表示されて実行することはできませんでした。

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

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

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

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

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

guest

回答1

0

自己解決

Laravel側の.envの

DB_HOST=127.0.0.1

DB_HOST=db

でphp artisan migrateを実行したところ成功できました。

投稿2021/08/19 13:50

gomiobake666

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問