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 をローカルで使用しているため、ポートが利用済となっていました。解決策としては、

  1. ポートの80番/3306番を開放する
  2. 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