2021-09-23
【Laravel Sail】`sail up` コマンド実行時の Cannot start service … address already in use エラー
Laravel Sail で Docker 環境立ち上げ時に出くわしたエラーの対象方法メモ書き
環境
- Ubuntu 20.04 Desktop
- Laravel 8.x
※OSやバージョンが異なっても下記と同一のエラーであれば同様に対処できると思います
エラー内容
./vendor/bin/sail up
を実行時、下記のようなエラーが発生する
・MySQLイメージが立ち上がらない
ERROR: for mysql Cannot start service mysql: driver failed programming external connectivity on endpoint example-app_mysql_1 (省略): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use
・Webサーバイメージが立ち上がらない
ERROR: for example-app_laravel.test_1 Cannot start service laravel.test: driver failed programming external connectivity on endpoint example-app_laravel.test_1 (省略): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use
原因・解決策
原因はエラーメッセージに書いてあるとおりですが、ポートの80番や3306番が別アプリケーションで利用済のためです。私の環境下では Nginx や MySQL をローカルで使用しているため、ポートが利用済となっていました。解決策としては、
- ポートの80番/3306番を開放する
- Laravelアプリで空いているポートを利用する
の2通りが考えられますが、②の方法を採用します。手順は簡単で、.env
でポート設定を書き換えるだけです。
APP_PORT=8080
を追加FORWARD_DB_PORT=33066
を追加
.env
APP_NAME=Laravel
APP_ENV=local
APP_KEY= // 省略
APP_DEBUG=true
APP_URL=http://example-app.test
APP_PORT=8080
LOG_CHANNEL=stack
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
FORWARD_DB_PORT=33066
DB_DATABASE=example_app
DB_USERNAME=sail
DB_PASSWORD=password
// 以下省略
その後、Docker をリスタートします
bash
./vendor/bin/sail down
./vendor/bin/sail up
Webサーバが8080番、MySQLが33066番でListenされ、正常にイメージが立ち上がりました。
bash
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4fabed6f1f90 sail-8.0/app "start-container" 2 minutes ago Up 2 minutes 8000/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp example-app_laravel.test_1
2f2a8bca4fc5 mailhog/mailhog:latest "MailHog" 2 minutes ago Up 2 minutes 0.0.0.0:1025->1025/tcp, :::1025->1025/tcp, 0.0.0.0:8025->8025/tcp, :::8025->8025/tcp example-app_mailhog_1
ff197fdd0936 mysql:8.0 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes (healthy) 33060/tcp, 0.0.0.0:33066->3306/tcp, :::33066->3306/tcp example-app_mysql_1
cc2283b5f252 redis:alpine "docker-entrypoint.s…" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp example-app_redis_1
7ded5834509c getmeili/meilisearch:latest "tini -- /bin/sh -c …" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:7700->7700/tcp, :::7700->7700/tcp example-app_meilisearch_1
19105ce35c45 selenium/standalone-chrome "/opt/bin/entry_poin…" 2 minutes ago Up 2 minutes 4444/tcp example-app_selenium_1