久しぶりに新しくLaradockプロジェクトを立ち上げようと思い、gitで最新のLaradockをクローンして実行したらこんなエラーが。
$ docker-compose up -d nginx mysql phpmyadmin Recreating laradock_docker-in-docker_1 ... done Recreating laradock_mysql_1 ... done Recreating laradock_workspace_1 ... Recreating laradock_workspace_1 ... error WARNING: Host is already in use by another container ERROR: for laradock_workspace_1 Cannot start service workspace: driver failed programming external connectivity on endpoint laradock_workspace_1 (32b48ac6bc41c6c8e5e4bcc2d5be2ff8b6b252732ca175cd2a0b3bc07257cf9f): Bind for 0.0.0.0:8080 failRecreating laradock_phpmyadmin_1 ... done ERROR: for workspace Cannot start service workspace: driver failed programming external connectivity on endpoint laradock_workspace_1 (32b48ac6bc41c6c8e5e4bcc2d5be2ff8b6b252732ca175cd2a0b3bc07257cf9f): Bind for 0.0.0.0:8080 failed: port is already allocated ERROR: Encountered errors while bringing up the project.
なんか、laradock_workspace_1 コンテナのポートがすでに使われてるみたいなことを言われてる…?
8080番ポートにバインドされているけど、phpmyadminが使ってるよ的な?
結論から言うと、workspaceコンテナで使うポートとphpmyadminで使うポートが被っているのが原因でした。
なので、.envファイルで指定されているworkspaceコンテナのポート番号を別の番号に変更したら解決できました。
以下、解決までの流れを自分用にメモしておきます。
Dockerを再起動するも変化なし
ちょっと調べてみたところ、以下の記事を発見。
docker-compose up したらdriver failed programming external connectivity on endpointが出てきた
記事の通りに早速Dockerを再起動してみましたが、特に変化なし。
ポート番号を変更
今まではコンテナを立ち上げるときは、以下のサービスを立ち上げていました。
docker-compose up -d nginx mysql phpmyadmin
なので今回も同じようにコンテナを立ち上げてみましたが、うまく立ち上がりません。
今回はこれを解決して、nginx、mysql、phpmyadminを同時に立ち上げることがゴールです。
以下のエラー文を見る限り、原因はどうやらポートが被ってるのがいけないっぽい。
$ docker-compose up -d nginx mysql phpmyadmin ... 省略 ... Recreating laradock_workspace_1 ... error WARNING: Host is already in use by another container ... 省略 ...
なので、ポート番号がどのように割り当てられているか確認。
$ docker-compose ps -a Name Command State Ports ----------------------------------------------------------------------------------------------------------- laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/tcp laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp laradock_phpmyadmin_1 /docker-entrypoint.sh apac ... Up 0.0.0.0:8080->80/tcp laradock_workspace_1 /sbin/my_init Exit 128
nginxとか立ち上がってないじゃん…。
それはさておき、やはりworkspaceコンテナに問題がありそう。
手順を間違えたのかな?と思い、Laradockのドキュメントを読み返しているとこんな一文が。
(Please note that sometimes we forget to update the docs, so check the
docker-compose.yml
file to see an updated list of all available containers).
なのでとりあえず、docker-compose.yml ファイルを見てみることに。
...省略... 57### Workspace Utilities ################################## 58 workspace: 59 build: 60 context: ./workspace 61 args: 62 - CHANGE_SOURCE=${CHANGE_SOURCE} 63 - UBUNTU_SOURCE=${UBUNTU_SOURCE} ...省略... 154 ports: 155 - "${WORKSPACE_SSH_PORT}:22" 156 - "${WORKSPACE_VUE_CLI_SERVE_HOST_PORT}:8080" 157 - "${WORKSPACE_VUE_CLI_UI_HOST_PORT}:8000" 158 tty: true 159 environment: 160 - PHP_IDE_CONFIG=${PHP_IDE_CONFIG} ...省略...
なるほど、WORKSPACE_SSH_PORT が、コンテナの22番ポートに割り当てられるということか、多分。
WORKSPACE_SSH_PORTの値が何か知るために、次は .env を見てみることに。
...省略 85 ### WORKSPACE ############################################# 86 87 WORKSPACE_COMPOSER_GLOBAL_INSTALL=true 88 WORKSPACE_COMPOSER_AUTH=false 89 WORKSPACE_COMPOSER_REPO_PACKAGIST= ...省略... 155 WORKSPACE_CHROME_DRIVER_VERSION=2.42 156 WORKSPACE_TIMEZONE=UTC 157 WORKSPACE_SSH_PORT=2222 158 WORKSPACE_INSTALL_FFMPEG=false 159 WORKSPACE_INSTALL_WKHTMLTOPDF=false 160 WORKSPACE_INSTALL_GNU_PARALLEL=false 161 WORKSPACE_INSTALL_AST=true 162 WORKSPACE_AST_VERSION=1.0.3 163 WORKSPACE_VUE_CLI_SERVE_HOST_PORT=8080 164 WORKSPACE_VUE_CLI_UI_HOST_PORT=8001 165 WORKSPACE_INSTALL_GIT_PROMPT=false ...省略...
WORKSPACE_SSH_PORT=2222 ってことが判明。
でもよく見てみると、それよりも気になる一行が…
163 WORKSPACE_VUE_CLI_SERVE_HOST_PORT=8080
なんで、ここに8080番ポートが割り当てられてるんだ?
さっき docker-compose ps で確認した時は、8080番はphpmyadminが使ってたはず。
ってことで、この行の8080番を別のポート番号(安直に8081番)にしてみることに。
その後、docker-compose down -v でコンテナを削除してから、再び docker-compose up で立ち上げてみたら、
$ docker-compose down -v Stopping laradock_phpmyadmin_1 ... done Stopping laradock_mysql_1 ... done Stopping laradock_docker-in-docker_1 ... done Removing laradock_phpmyadmin_1 ... done Removing laradock_workspace_1 ... done Removing laradock_mysql_1 ... done Removing laradock_docker-in-docker_1 ... done Removing network laradock_frontend Removing network laradock_backend Removing network laradock_default Removing volume laradock_mysql Removing volume laradock_percona Removing volume laradock_mssql Removing volume laradock_postgres Removing volume laradock_memcached Removing volume laradock_redis Removing volume laradock_neo4j Removing volume laradock_mariadb Removing volume laradock_mongo Removing volume laradock_minio Removing volume laradock_rethinkdb Removing volume laradock_phpmyadmin Removing volume laradock_adminer Removing volume laradock_aerospike Removing volume laradock_caddy Removing volume laradock_elasticsearch Removing volume laradock_mosquitto Removing volume laradock_confluence Removing volume laradock_sonarqube Removing volume laradock_cassandra Removing volume laradock_graylog Removing volume laradock_docker-in-docker $ docker-compose up -d nginx mysql phpmyadmin Creating network "laradock_frontend" with driver "bridge" Creating network "laradock_backend" with driver "bridge" Creating network "laradock_default" with the default driver Creating volume "laradock_mysql" with local driver Creating volume "laradock_percona" with local driver Creating volume "laradock_mssql" with local driver Creating volume "laradock_postgres" with local driver Creating volume "laradock_memcached" with local driver Creating volume "laradock_redis" with local driver Creating volume "laradock_neo4j" with local driver Creating volume "laradock_mariadb" with local driver Creating volume "laradock_mongo" with local driver Creating volume "laradock_minio" with local driver Creating volume "laradock_rethinkdb" with local driver Creating volume "laradock_phpmyadmin" with local driver Creating volume "laradock_adminer" with local driver Creating volume "laradock_aerospike" with local driver Creating volume "laradock_caddy" with local driver Creating volume "laradock_elasticsearch" with local driver Creating volume "laradock_mosquitto" with local driver Creating volume "laradock_confluence" with local driver Creating volume "laradock_sonarqube" with local driver Creating volume "laradock_cassandra" with local driver Creating volume "laradock_graylog" with local driver Creating volume "laradock_docker-in-docker" with local driver Creating laradock_docker-in-docker_1 ... done Creating laradock_mysql_1 ... done Creating laradock_workspace_1 ... done Creating laradock_phpmyadmin_1 ... done Creating laradock_php-fpm_1 ... done Creating laradock_nginx_1 ... done
うまくいきました!
ポート番号も確認してみると、
$ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------------------------------------- laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/tcp laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp laradock_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:81->81/tcp laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp laradock_phpmyadmin_1 /docker-entrypoint.sh apac ... Up 0.0.0.0:8080->80/tcp laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp, 0.0.0.0:8081->8080/tcp
ちゃんと、8080番はphpmyadminコンテナ、8081番はworkspaceコンテナに割り当てられてるのが確認できます。
補足 前ver.のLaradockとの比較
一応、今まで使ってたLaradockプロジェクトの方でもポートを確認してみました。
$ docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------------------------------- laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/tcp laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp laradock_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp laradock_phpmyadmin_1 /docker-entrypoint.sh apac ... Up 0.0.0.0:8080->80/tcp laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
そして、今回がこれ↓(再掲載)
$ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------------------------------------- laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/tcp laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp laradock_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:81->81/tcp laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp laradock_phpmyadmin_1 /docker-entrypoint.sh apac ... Up 0.0.0.0:8080->80/tcp laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp, 0.0.0.0:8081->8080/tcp
これをみる限り、今までのLaradockのworkspaceコンテナのポートは2222番だけですが、なぜか今回は8000番と8080番が追加されています。
今回のwoekspaceコンテナに関して .envの設定を見てみると、今までとは違うポートも割り当てられていました。
...省略... 156 - "${WORKSPACE_VUE_CLI_SERVE_HOST_PORT}:8080" 157 - "${WORKSPACE_VUE_CLI_UI_HOST_PORT}:8000" ...省略...
アップデートした際に追加されたのかな?
コメント
コメント一覧 (2件)
[…] ※「ポートが被ってるよ〜」ってエラーが出るかも。その時の対処法はこちらの記事にまとめました。 […]
[…] というエラーが出た場合は、こちらの記事を参照してください。 […]