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

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

新規登録して質問してみよう
ただいま回答率
85.35%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

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

Q&A

解決済

2回答

11233閲覧

dockerでのコンテナ作成時、MySQLが起動しない

takehiro09

総合スコア1

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

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

0グッド

1クリップ

投稿2021/05/16 06:35

編集2021/05/16 06:52

前提・実現したいこと

完全初心者で初めての質問になります。
dockerでのlaravel環境構築をしたいのですが、MySQLで詰まっています。

発生している問題・エラーメッセージ

docker-composeで設定した各ファイルを読み込み、コンテナは作成できたのですが
その中に作成しているmysql_test1 mysql:8.0.23がrunになったりrestartingになったりしています。
docker desktopでrestartingの状態で起動ボタンを押すと以下のエラーメッセージがでます。

Error invoking remote method 'docker-start-container': Error: (HTTP code 304) container already started -

mysql_test1 mysql:8.0.23のログを確認してみると、停止するタイミングで

mysql_test1 exited with code 1

と表示されています。

ディレクトリ構成は以下の通りです。

docker ├ docker-compose.yml ├ htdocs └ php ├ Dockerfile └ php.ini

Dockerfile

FROM php:8.0.3-apache COPY php.ini /usr/local/etc/php/

docker-compose.yml

version: "3" services: php: container_name: php_test1 build: context: ./php ports: - 8081:80 volumes: - ./htdocs:/var/www/html restart: always db: container_name: mysql_test1 image: mysql:8.0.23 volumes: - ./mysqlvol:/var/lib/mysql restart: always environment: MYSQL_DATABASE: test_db MYSQL_ROOT_PASSWORD: take098393 command: --character-set-server=utf8mb4 --collection-server=utf8mb4_unicode_ci ports: - 3306:3306

index.php

<?php $dsn = 'mysql:dbname=test_db;host=mysql_test1;port=3306;'; $user = 'root'; $password = 'password'; try { $db = new PDO($dsn, $user, $password); echo '接続成功'; } catch(PDOException $e) { echo '接続失敗' . $e->getmessage(); }

localhostに接続すると

接続失敗could not find driver

と表示されます。

試したこと

エラーメッセージで検索したり、コンテナ削除、作成をしてみたり、もう一度1から設定し直したりしたのですが解決しません…
ファイルの記述もインデント、誤字・脱字等は何度も見直しているので間違いはないと思います…
どなたかご教示いただけると幸いです。

補足情報(FW/ツールのバージョンなど)

docker 20.10.6
docker compose 1.29.1
PHP php:8.0.3-apache
MySQL MySQL:8.0.23

参考にしているサイト
https://www.webopixel.net/develop/1687.html

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

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

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

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

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

guest

回答2

0

ベストアンサー

もしかして、docker-compose.yaml の db.command の部分の
--collation-server--collection-server に誤字している?

投稿2021/05/26 14:37

kiino

総合スコア557

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

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

kiino

2021/05/26 14:45

回答ずれるので、コメントとして記載させていただきます 以下2点ほど補足させてください。 1. mysql_test1 mysql:8.0.23のログ のログについて `mysql_test1 exited with code 1` より前に出力されたログ、 特にエラー部分を記載された方がよいと思いました。 記載していただいた内容自体は、「mysql_test1 のdocker 起動に失敗したので、終了します」という内容の出力なので、 その原因にいたるログ出力を記載されると問題の解消に至りやすくなると思います。 2. index.php の $password を変更された方がよさそうです。 docker-compose 内でDBの password を変更されていると思います(MYSQL_ROOT_PASSWORD の部分) 変数 `$password` の値が参照サイトの値のままにされていますが、 接続時には変更したパスワードが必要になるので、そちらの値に変更された方がよさそうです。
takehiro09

2021/05/27 14:13

質問の仕方までご教授いただきありがとうございます。 次からは過去のログまでしっかりと確認した上で質問しようと思います。 仰られていた部分を確認し、誤字の修正と変数の値を変更したところ、うまくいきました! 大変勉強になりました。初歩中の初歩の質問に丁寧に回答していただき本当に感謝しています。 ありがとうございました!
kiino

2021/05/27 14:45

解決したようで何よりです。 差し出がましいようですいません。 デバッグの方法などもソフトウェア開発をするうえで重要だとかんがえているので 解析方法についても是非覚えていただきたかったので記載いたしました 誰でも最初はあると思いますし、大変に感じるかと思いますが、 慣れてくれば問題解決もしやすくなるかと思います。
guest

0

could not find driverということはドライバが入ってないのではないでしょうか?
phpinfoとかで確認してみればいいと思います。

# index.php <?php phpinfo(); die(); $dsn = 'mysql:dbname=test_db;host=mysql_test1;port=3306;'; :

pdo_mysqlが表示されてなければ設定が足りないものと思います。
その場合はphp/Dockerfileに其れをインストールするような処理を追加すればいいと思います。

投稿2021/05/16 18:07

tomomo

総合スコア430

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

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

takehiro09

2021/05/17 14:57

回答ありがとうございます。 仰られた通り、pdo_mysqlがインストールされていませんでした。 無事インストールがおわり、再度確認してみたところエラー表記が SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known に変わりました。 laravelだとenvファイルのdb名を変えるといいみたいなのですが、laravel自体まだインストールできていないので途方にくれています… envのようなファイルがphpにもあるのでしょうか? 本当に初歩的な質問ばかりで申し訳ないです…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問