如果在执行「docker compose up」时出现「driver failed programming external connectivity on endpoint」错误,应该如何处理?
环境
-
- 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でエンドポイントの外部接続のプログラミングが失敗した場合の対応策があります。
According to this article, the main causes of the issue “driver failed programming external connectivity on endpoint” with Docker Compose are primarily as follows:
-
- 其他容器与端口号重复了
- 创建失败的容器仍然存在,并且在该容器中重新创建了。
据说有两种可能性(在我个人的情况下是第一种)
应对(请参考上述文章)
1. 在docker-compose.yml中修改目标容器的端口号。
由于原先使用的端口号已经被占用,所以需要修改yml文件中的端口号。
※由于格式为(主机端口号):(容器端口号),所以这次我们改变了主机的端口号。
变更之前
ports:
- 3306:3306
更改之后 zhī
ports:
- 3307:3306 # ホストのポート番号を変更
删除创建失败的容器。
如果在此处不删除并启动,那么就会出现原因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)
然而,如果容器未停止,可能会出现错误响应:”守护进程错误:无法删除正在运行的容器(目标容器ID)。在尝试删除之前,请停止容器或强制删除”。
如果是这种情况,您可以通过添加”–force”选项来强制删除容器。
如果成功,结果将如下所示。
$ docker rm --force (対象コンテナID)
> (対象コンテナID)
重新建立容器
最后,您需要指定容器的名称来构建镜像并启动容器。
$ docker-compose up -d --no-recreate --build (コンテナ名)
最后
感谢您阅读到这里!但是由于我还是一个Docker的新手,可能会有一些错误的信息。因此,如果有任何错误的信息,请您指出来。