docker-compose で起動したweb、MySQLに接続できない事象
概要
以前作成したPHP + MySQL + LaravelのDockerプロジェクトがコンテナを立ち上げても画面にアクセスできなくなってしまったときの解決方法です。
以前の記事は以下です。
【Laravel + MySQL】Dockerで開発環境を作る
https://www.s-watanabe.work/2020/12/laravel-mysqldocker.html
発生事象
コンテナを起動
$ docker-compose up -d
Starting laravel-project_mysql_1 ... done
Starting laravel-project_app_1 ... done
Starting laravel-project_web_1 ... done
ブラウザでアクセス
いつものようにブラウザでアクセスしますが接続できません。
http://localhost:8000
※この時Docker側のログには何も出力されません。
MySQLへ接続
MySQLも確認してみましたが同じく接続できなくなりました。
$ mysql -h 127.0.0.1 -u user -ppassword -D test
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 2
調査・確認
まず以下の記事を参考に新規のDockerプロジェクトが起動・接続できるかを確認しました。
# docker-compose はインストール済み
$ docker-compose --version
docker-compose version 1.26.0, build d4451659
mkdir test
cd test
mkdir app
echo "<h1>test</h1>" > app/indexhtml
vim docker-compose.yml
docker-compose.yml
version: '3.7'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/html
Docker Composeを実行
$ docker-compose up -d
Creating network "test_default" with the default driver
Pulling web (nginx:alpine)...
alpine: Pulling from library/nginx
a0d0a0d46f8b: Pull complete
bc3893c8dbcc: Pull complete
f21b23410f57: Pull complete
43ba45444676: Pull complete
7223cfd05eeb: Pull complete
25319a3e9e44: Pull complete
Digest: sha256:859ec6f2dc548cd2e5144b7856f2b5c37b23bd061c0c93cfa41fb5fb78307ead
Status: Downloaded newer image for nginx:alpine
Creating test_web_1 ... done
# 確認
$ curl http://localhost:8000/
<h1>test</h1>
docker-compose 自体は問題なさそう。以下コマンドで終了する。
$ docker-compose kill
Killing test_web_1 ... done
原因と解消について
原因はどうやら長く同じコンテナで作業をしているとポートがバッティングしてしまい、接続できなくなるらしい。※よく分かっていないので分かったら追記します。
とにかく一度こうなってしまうとネットワークを再構築しなくてはならない。その手順が以下です。
Dockerネットワークを確認
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
544b56bd1d88 bridge bridge local
49d918298f8e host host local
80ed5e43274f laravel-project_default bridge local <- 問題の発生しているコンテナ
3ed70dfabdfe none null local
dc77a3b014b7 test_default bridge local
対象のDockerネットワークを削除
docker network rm 80ed5e43274f
80ed5e43274f
コンテナを停止して起動する
一度停止してから再度起動することでネットワークが再構築されます。
$ docker-compose down Removing laravel-project_web_1 ... done Removing laravel-project_app_1 ... done Removing laravel-project_mysql_1 ... done Removing network laravel-project_default $ docker-compose up -d Creating network "laravel-project_default" with the default driver Creating laravel-project_mysql_1 ... done Creating laravel-project_app_1 ... done Creating laravel-project_web_1 ... done
これでブラウザからのアクセスもMySQLも無事接続できるようになりました。
コメント
コメントを投稿