質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

3914閲覧

Docker port is already allocatedエラーでdocker-compose upができません。

Nako4

総合スコア2

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/03/07 11:33

前提・実現したいこと

port is already allocatedエラーを解決し、docker-compose upでアプリとDBのコンテナを起動したいです。

質問の内容
自作アプリ開発中にdockerでの環境を実装しようと思いました。
dockerの公式リファレンスやQiita記事を参考に以下のようにDockerfile、docker-compose.ymlを記述しました。
つい先週まではこの記述でdocker-compose upでコンテナが起動し、ブラウザでアプリが見れていました。
他の方のポートフォリオを見てみたいと思い、githubからcloneし、dockerが入っていたので、docker-compose upでアプリを起動しようとしたところ、以下エラーが発生し、その後自分のアプリでもエラーがでるようになってしまいました。

発生している問題・エラーメッセージ

ERROR: for habit_app_db_1 Cannot start service db: driver failed programming external connectivity on endpoint habit_app_db_1 (35a1dc1b4365dc367cd93b7ff2eda882ed46d22fcdc8860a542579b4b41261dc): Bind for 0.0.0.0:4306 failed: port is already allocated ERROR: for db Cannot start service db: driver failed programming external connectivity on endpoint habit_app_db_1 (35a1dc1b4365dc367cd93b7ff2eda882ed46d22fcdc8860a542579b4b41261dc): Bind for 0.0.0.0:4306 failed: port is already allocated

該当のソースコード

docker

1version: '3' 2services: 3 db: 4 image: mysql:5.7 5 environment: 6 MYSQL_ROOT_PASSWORD: password 7 MYSQL_DATABASE: root 8 MYSQL_USER: root 9 MYSQL_PASSWORD: password  10 ports: 11 - "4306:3306" 12 13 web: 14 build: . # 相対パスでDockerfileを探しにいき、Dockerfileを元にコンテナイメージを作成 15 command: rails s -p 3000 -b '0.0.0.0' 16 volumes: 17 - .:/app_name 18 ports: 19 - "3000:3000" 20 links: 21 - db

docker

1FROM ruby:2.6.5 2 3# 必要なパッケージのインストール(基本的に必要) 4RUN apt-get update -qq && \ 5 apt-get install -y build-essential \ 6 libpq-dev \ 7 nodejs 8 9# 作業ディレクトリの作成、設定 10RUN mkdir /app_name 11##作業ディレクトリ名をAPP_ROOTに割り当てて、以下$APP_ROOTで参照 12ENV APP_ROOT /app_name 13WORKDIR $APP_ROOT 14 15# ホスト側(ローカル)のGemfileを追加する 16COPY ./Gemfile $APP_ROOT/Gemfile 17COPY ./Gemfile.lock $APP_ROOT/Gemfile.lock 18 19# Gemfileのbundle install 20RUN gem install bundler:2.0.2 && bundle install 21ADD . $APP_ROOT

試したこと

Bind for 0.0.0.0:4306 failed: port is already allocated
この部分のエラーがportがすでに存在しており接続できないといった意味であると思い、ポート番号に割り当てられているプロセスを確認しました。
割り当てられているプロセスがなく、問題がわからなかったためいったんすべてのコンテナを削除し、再度docker-compose up を行いましたが、同様のエラーが発生しました。
手順は
sudo lsof -i:4306でプロセスの確認をしましたが、何も表示されませんでした。
その後docker rm $(docker ps -q -a)でコンテナをすべて削除
docker ps -aでコンテナがすべて無いことを確認
docker container pruneを行い、docker-composeを行いましたが、同様のエラーが発生しました。

補足情報(FW/ツールのバージョンなど)

バージョン
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]
Rails 6.0.3.4
mysql Ver 14.14 Distrib 5.6.50, for osx10.15 (x86_64) using EditLine wrapper
Docker version 20.10.0, build 7287ab3

dockerを学習したつもりでしたが、コンテナ同士がどういったふうにportと接続していて、なぜ今回接続できないのか全くわかりませんでした。
その他必要情報ありましたらコメント下さい。
ご回答よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2021/03/07 12:41

とりあえず別ポート番号で試したりとかしたんだろうか。
Nako4

2021/03/08 10:06 編集

コメントありがとうございます。 web: ports: - "4000:3000" webのHOSTのポートを4000に変えるとdocker-composeでき、ブラウザでアプリが開けるのを確認しました。
guest

回答1

0

ベストアンサー

DockerのGitHubのissueにもありますように、様々な原因によって、何かしらポートが使われているか、あるいは Docker Desktop for Windows/macOS であれば個別の問題があるかもしれません。

docker network prune を実行して解消できるかどうかのご確認と、 Linux であれば sudo service docker restart のように Docker Engine の再起動を試みてはいかがでしょうか。あるいは、原因がわからなないものの、マシンの再起動によってポートのバインドはなくなりますので、回復が期待できます。

投稿2021/04/03 08:40

zembutsu

総合スコア1584

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nako4

2021/04/06 09:45

ご回答ありがとうございます。 docker network pruneとdocker restartは試しており、ダメでした。 PC再起動によって試したところ解決しました。 こんな単純に解決できるとは。。。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問