2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

「docker compose up」の際に「driver failed programming external connectivity on endpoint」エラーが発生した場合の対処

Posted at

環境

  • Docker version 24.0.6
  • Docker Compose version v2.4.1

はじめに

docker compose up -dコマンドでコンテナを一括起動しようとした際に、上記のエラーError response from daemon: driver failed programming external connectivity on endpoint (コンテナ名) (コンテナID): Bind for 0.0.0.0:3306 failed: port is already allocatedと出てしまいました。

原因

Docker Composeでdriver failed programming external connectivity on endpointとなった時の対応方法
こちらの記事によると、原因としては主に

  1. 他のコンテナとポート番号が被っている
  2. 作成に失敗したコンテナが残っておりそのコンテナで作り直されてしまっている

以上の2点が考えられるそうです。(自分の場合は1でした)

対処(上記記事参照)

1. docker-compose.ymlで対象コンテナのポート番号を変更

元々使用していたポート番号が既に使われていたので、ymlファイルに記載されているポート番号を変更します。
(ホストのポート番号):(コンテナのポート番号)になるので、今回はホストのポート番号を変更しました。

変更前

docker-compose.yml
ports:
      - 3306:3306

変更後

docker-compose.yml
ports:
      - 3307:3306 # ホストのポート番号を変更

2. 作成に失敗したコンテナを削除する

ここで削除せずに起動すると、原因2の「作成に失敗したコンテナが残っておりそのコンテナで作り直されてしまっている」状態になるため、先に失敗したコンテナを削除します。

まず、docker ps -aコマンドで停止しているコンテナを含めた全てのコンテナのIDから、
作成に失敗したコンテナIDを確認します。

$ docker ps -a
> CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS                    PORTS
  2a638415a56e   mysql:5.7            "docker-entrypoint.s…"   2 minutes ago   Created                0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp

次に、見つけたコンテナIDを指定してdocker rmコマンドで削除します
成功すれば、以下のようになります。

$ docker rm (対象コンテナID)
> (対象コンテナID)

ただ、コンテナを停止していない場合にError response from daemon: You cannot remove a running container (対象コンテナID). Stop the container before attempting removal or force removeというエラーが発生する場合があります。

その場合は、--forceオプションをつけることで強制的にコンテナを削除します。
成功すれば、以下のようになります。

$ docker rm --force (対象コンテナID)
> (対象コンテナID)

3. コンテナを作り直す

最後に、対象のコンテナ名を指定してイメージ構築とコンテナの起動を行います。

$ docker-compose up -d --no-recreate --build (コンテナ名)

おわりに

ここまでご覧いただきありがとうございます!
しかし、まだdocker素人ということもあり間違った情報を載せてしまっている場合があります。
なので、間違ってる情報があればご指摘していただきたいです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?