【エラー解決】springをdockerで環境構築しようとした際に発生


目的

エラー発生。
Dockerで開発環境を構築した際に遭遇した。
エラー文と解決策を忘れないように載せておく

結論

以前作ったコンテナはプロジェクトではなくコマンドで削除しないと消えないことがわかった
ポート番号でエラーがおきた原因は分からなかった。

状況

javaのspringをdockerで環境構築をしようとした際に発生した。
Flywayをマイグレーションツールとして入れていた。

【環境構築】

$ docker-compose up -d
Starting vi_bank_db_1 ... error
ERROR: for vi_bank_db_1  Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use
$ lsof -i :3306 →何も表示されない

エラー

ERROR: for db  Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use
ERROR: Encountered errors while bringing up the project.
$ docker-compose down
WARNING: Found orphan containers (vi_bank_flyway-repair_1, vi_bank_flyway-info_1, vi_bank_flyway-migrate_1, vi_bank_flyway-clean_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Removing vi_bank_db_1 ... done
Removing network vi_bank_default
$ docker-compose up -d --remove-orphans
Creating network "vi_bank_default" with the default driver
Removing orphan container "vi_bank_flyway-migrate_1"
Removing orphan container "vi_bank_flyway-repair_1"
Removing orphan container "vi_bank_flyway-info_1"
Removing orphan container "vi_bank_flyway-clean_1"
Creating vi_bank_db_1 ... error

ERROR: for vi_bank_db_1  Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use

ERROR: for db  Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use

解説

Found orphan containers
同じプロジェクトにすでにコンテナがあるよ、注意されました。
以前個人で作ったコンテナが残ったままだったようです。
Dockerでの開発初めてなので勉強になります。
これのdocker-compose up -dが実行されない原因のようです。
エラーにしたがってコマンドを実行します

$ docker-compose up -d --remove-orphans

【解決策】

  • ポート番号を3306→3307に変更した
docker-compose.yml

version: '3.7'
services:
  db:
    image: mysql:8.0.20
    ports:
      - "3307:3306"

その後

$ docker-compose up -d
Recreating vi_bank_db_1 ... done
$ docker-compose exec db mysql -u docker -p
パスワード入力→成功
mysql>

発生したエラー
ERROR: for vi_bank_db_1 Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use

対処法

$ lsof -i :3306
#何も表示されない
$ docker-compose up -d
Recreating vi_bank_db_1 ... done

更新201108

エラー解決

Gradleのjavaのバージョンが設定できていなかった。

参考にした記事(いつもありがとうございます)

DockerでMySQLを利用する[docker container run オプション]

Error starting userland proxy: listen tcp0.0.0.0:3306: bind: address already in use