新規プロジェクトの開発にあたりdockerで環境構築する際にdocker-compose up -d
をしたら下記エラーが出てnginxが立ち上がりませんでした。
WARNING: Image for service nginx was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating redis ... done
Creating mysql ... done
Creating app ... done
Creating nginx ... error
ERROR: for nginx Cannot start service nginx: driver failed programming external connectivity on endpoint nginx
(xxxxx): Error starting userland proxy: Bind for 0.0.0.0:80: unexpected error (Failure EADDRINUSE)
エラーの原因はエラーメッセージの通りで、port80ですでにコンテナが起動しているからです。
Macでは、デフォルトでApacheが入っていてそれがPort80で立ち上がってるらしく、それを止めることで解決します。
$ sudo lsof -i -P | grep "LISTEN"
私の場合は下記のように出ました。
Password:
httpd 99 root 4u IPv6 0x4405ecbd1691af79 0t0 TCP *:80 (LISTEN)
cupsd 244 root 7u IPv6 0x4405ecbd1691a9b9 0t0 TCP *:631 (LISTEN)
cupsd 244 root 8u IPv4 0x4405ecbd143300b9 0t0 TCP *:631 (LISTEN)
httpd 340 _www 4u IPv6 0x4405ecbd1691af79 0t0 TCP *:80 (LISTEN)
Sketch 364 RURI 6u IPv4 0x4405ecbd14331d39 0t0 TCP *:49155 (LISTEN)
Sketch 364 RURI 18u IPv6 0x4405ecbd1691a3f9 0t0 TCP *:49155 (LISTEN)
plugin_ho 612 RURI 36u IPv4 0x4405ecbd2004e6b9 0t0 TCP localhost:54000 (LISTEN)
Adobe\x20 953 RURI 12u IPv4 0x4405ecbd2412c6b9 0t0 TCP localhost:15292 (LISTEN)
node 70724 RURI 23u IPv6 0x4405ecbd31e3b2b9 0t0 TCP *:8081 (LISTEN)
Dropbox 71694 RURI 130u IPv6 0x4405ecbd3045baf9 0t0 TCP *:17500 (LISTEN)
Dropbox 71694 RURI 132u IPv4 0x4405ecbd32fa7a39 0t0 TCP *:17500 (LISTEN)
Dropbox 71694 RURI 162u IPv4 0x4405ecbd32d7ea39 0t0 TCP localhost:17600 (LISTEN)
Dropbox 71694 RURI 166u IPv4 0x4405ecbd32cf10b9 0t0 TCP localhost:17603 (LISTEN)
com.docke 74463 RURI 18u IPv4 0x4405ecbd2fc140b9 0t0 TCP *:16379 (LISTEN)
com.docke 74463 RURI 20u IPv4 0x4405ecbd33662a39 0t0 TCP *:8080 (LISTEN)
com.docke 74463 RURI 21u IPv6 0x4405ecbd3045c0b9 0t0 TCP localhost:8080 (LISTEN)
com.docke 74463 RURI 24u IPv6 0x4405ecbd1691c0b9 0t0 TCP localhost:16379 (LISTEN)
com.docke 74463 RURI 25u IPv4 0x4405ecbd336b06b9 0t0 TCP *:3306 (LISTEN)
com.docke 74463 RURI 26u IPv6 0x4405ecbd1691b539 0t0 TCP localhost:3306 (LISTEN)
httpdがport80を使ってしまっているので、Macで起動しているApacheを止めましょう。
これで再度
docker-compose up -d
をしたらnginxが起動しました。
redis is up-to-date
mysql is up-to-date
app is up-to-date
Starting nginx ... done