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

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

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

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

Laravel

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

PHP

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

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

Docker

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

Q&A

解決済

3回答

535閲覧

DockerコンテナにあるLaravelのアプリからhostのMySQLに接続できない

yuki1111

総合スコア73

MySQL

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

Laravel

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

PHP

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

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

Docker

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

0グッド

0クリップ

投稿2024/05/05 11:48

編集2024/05/05 11:57

実現したいこと

Dockerコンテナ内にあるLaravelのアプリからhostのMySQLに接続したい。

発生している問題・分からないこと

以下のコマンドでDockerコンテナを起動する

Dockerコンテナを起動するためのコマンド

1docker build -t my-laravel-app . 2docker run -d -p 8000:8000 --cap-add=NET_ADMIN my-laravel-app

Dockerコンテナにログインして以下のコマンドでファイアウォールを有効化する

ufw enable

Dockerコンテナ内でファイアウォールの穴あけするためのコマンド

ufw allow from 172.26.240.1 to any port 3306

上記のコマンドを実行してから以下のURLにアクセスすると「このページは動作していません」となります。

http://localhost:8000/

アクセスした結果

該当のソースコード

■エンドポイント https://github.com/yukikoike/Laravel-try-connect-MySQL/blob/main/routes/web.php ■Dockerfile https://github.com/yukikoike/Laravel-try-connect-MySQL/blob/main/Dockerfile

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

■Docker containerからhostのMySQLに接続する
https://zenn.dev/qaynam/articles/afa59be54ddad2
↑のようにやったのですが、上手くいきません。
ipconfig
netstat

補足

php-fpm:8.3
php: 8.1
laravel/framework: 10.10
mysql:8.0.29 for Win64 on x86_64 (MySQL Community Server - GPL)
DockerコンテナのOS:Debian GNU/Linux 12
Windowsの仕様:
エディション:Windows 11 Pro
バージョン:23H2

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

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

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

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

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

guest

回答3

0

ベストアンサー

ブラウザのエラーが ERR_EMPTY_RESPONSE なので原因は「hostのMySQLに接続できない」以外に(も)あります。そのため2つ確認点を記載します。

ERR_EMPTY_RESPONSE の原因

laravel10だと恐らくvite関連と思いますが、laravelのログやブラウザの開発者ツールを確認してみてください。
「laravel ERR_EMPTY_RESPONSE」あたりでググれば情報があるかと思います。

コンテナのlaravelからhostのMySQLに接続できない

参考URLの一番重要な host.docker.internal を使ってないと推測します。(GitHubソースにも書いてないのでわからない)
WindowsのDocker-Desktopの利用前提で書きますが、
dockerコンテナ内から見ると、ホストのmysqlは host.docker.internal というホスト名で動作しているように見えるはずです。GitHubには.envファイルがないため設定状況が分かりませんが、接続先(DB_HOST) を host.docker.internalになるようlaravelの設定をして試してください。

投稿2024/05/05 18:21

hqf00342

総合スコア358

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

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

yuki1111

2024/05/06 06:06

ありがとうございます。host.docker.internalを使用したら上手くいきました。
guest

0

Dockerコンテナ内にあるLaravelのアプリからhostのMySQLに接続したい。

これだけなら--add-host host.docker.internal:host-gatewayオプションを追加してdocker起動するだけです。
起動オプション見るに試行錯誤はしたのかもしれませんが、その末に打ったコマンドがどんな意味を持つのかを理解していなさそうですのでコンテナは作り直した方が良いでしょう。

投稿2024/05/05 17:30

hentaiman

総合スコア6426

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

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

yuki1111

2024/05/06 06:05

ありがとうございます。 --add-host host.docker.internal:host-gatewayオプションと.envのDB_HOSTを host.docker.internalにしたら解決しました。
guest

0

Laravelの開発用途ならそんな意味不明なことをする理由がない。
難しい割にメリットが一つもない。
こういう根本が間違ってる質問は後から見た人を混乱させるのできっちり否定。

Sailを見てLaravelでの普通のDockerの使い方を覚えるのが先にやること。

Dockerが使えるのにhostのMySQLに接続できないと開発できないなんて状態には普通はならない。

投稿2024/05/05 12:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yuki1111

2024/05/06 06:04

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問