Compose: Docker-compose up 失败,因为“端口已分配”

创建于 2017-06-22  ·  64评论  ·  资料来源: docker/compose

我的 docker 容器能够成功构建,但是当我输入命令 docker-compose build 时,返回以下错误:

Starting docker_etl_1 ... 
Starting 1e5f56853e10_1e5f56853e10_1e5f56853e10_docker_postgis_1 ... 
Starting 1e5f56853e10_1e5f56853e10_1e5f56853e10_docker_postgis_1
Starting 1e5f56853e10_1e5f56853e10_1e5f56853e10_docker_postgis_1 ... error

ERROR: for 1e5f56853e10_1e5f56853e10_1e5f56853e10_docker_postgis_1  Cannot start service 
postgis: driver failed programming external connectivity on endpoint 
1e5f56853e10_1e5f56853e10_1e5f56853e10_docker_postgis_1 
(91464afbee8bf7212061797ec0f4c017a56cc3c30c9bdaf513127a6e6a4a5a52): Error starting 
userland prStarting docker_etl_1 ... done

ERROR: for postgis  Cannot start service postgis: driver failed programming external connectivity 
on endpoint 1e5f56853e10_1e5f56853e10_1e5f56853e10_docker_postgis_1 
(91464afbee8bf7212061797ec0f4c017a56cc3c30c9bdaf513127a6e6a4a5a52): Error starting 
userland proxy: Bind for 0.0.0.0:5432 failed: port is already allocated

这是我的 docker-compose.yaml

version: '2'
services:
  postgis:
    build: ./postgis
    volumes:
      - ../src/main/sql:/sql
    ports:
      - "5432:5432"

  etl:
    build: ./etl
    volumes:
      - ..:/national-voter-file
    entrypoint:
      - python3
      - /national-voter-file/load/loader.py

这是 Dockerfile:

FROM mdillon/postgis:9.5
ENV POSTGRES_DB VOTER
RUN  mkdir /sql
COPY ./dockerResources/z-init-db.sh /docker-entrypoint-initdb.d/
EXPOSE 5432

我不相信我有另一个容器正在运行,所以我对 Bind for 0.0.0.0:5432 failed: port is already allocation 消息感到困惑

最有用的评论

这👇对我有用!!

docker-compose down
docker rm -fv $(docker ps -aq)
sudo lsof -i -P -n | grep 5432
  • 对于 Mac
kill -9 <process id>
  • Linux
sudo kill <process id>

所有64条评论

netstat | grep 5432 ?

嗨@shin-,

我刚刚在我的机器上进行了硬重置,我得到:

$ docker-compose up
_collections.so could not be extracted!

之后,我遇到了与@patrickconnors发布的相同的问题:
selection_055

有任何想法吗?

@budnik尝试运行docker-compose down来清理容器和网络,然后再次运行up看看是否能解决问题。

我今天遇到了同样的问题(使用postgres容器),尽管尝试了docker-compose downup ,但问题仍然存在。

docker-compose psdocker ps显示了一个空输出。


不过,我可能已经找到了解决方案:

这就是我的postgres服务的定义方式

version: '2.1'

services:

  postgres:
    image: postgres:9.5.4
    env_file:
      - docker-compose.env
    ports:
      - 5432:5432

在我的情况下,修复只是禁用端口绑定,即将最后一部分更改为:

    ports:
      - 5432

不确定这是否是正确的解决方案,也不确定它是否可以普遍应用于所有用例。


可能是docker-compose本身的问题吗?
以供参考:

$ docker-compose --version
docker-compose version 1.12.0, build b31ff33

上面的解决方案是我需要的,非常感谢@lorenzo-pasa!

将我的 docker-compose 更新到 3.3 版本后,我遇到了同样的问题。
@lorenzo-pasa 解决方案在本地为我工作(仍然需要在 prod 中尝试)

以下是我的docker-compose _part_

nginx:
    image: nginx:1.12.2-alpine
    volumes:
      - .:/usr/share/nginx/app
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    ports:
      - "80"
    depends_on:
      - web

我有这个,还有像Cannot start service mysql: network 4b8e7a23e3724fd351e428be30cdf7a9294d142ac23959ca9092278fc81e96c1 not found这样的东西。 我通过在 up 命令中使用--build --force-recreate标志来解决它们。

这👇对我有用!!

docker-compose down
docker rm -fv $(docker ps -aq)
sudo lsof -i -P -n | grep 5432
  • 对于 Mac
kill -9 <process id>
  • Linux
sudo kill <process id>

错误:对于 iky_gateway 无法启动服务 iky_gateway:b'驱动程序在端点 iky_gateway 上编程外部连接失败(47d83edbbc1568eae6d26f5e75931797b7e23c6528ff7cc8140f50811fb44922):已分配的0000 000 00 个用户绑定端口代理失败。

我试过docker-compose down ,没有解决。

另一个可能对未来读者有所帮助的解决方案是:仔细检查您的 docker-compose.yml 文件并检查以确保您没有 2 个项目试图在端口 8080 上运行。

如果您确实有 2 个项目配置为在端口 8080 上运行,您可能会收到导致问题的服务/容器的“端口已分配”错误消息 - 当您尝试杀死服务/容器并获取时,这会导致您感到困惑没有解决错误消息。

@Rub21的解决方案对我kill -9 {pid}不断重启进程。 这是因为我运行了 MySQL 服务器。 在 OSX 上,我必须:

  1. 系统偏好设置
  2. 搜索mysql
  3. Stop MySQL Server按钮

我删除了端口绑定,它对我有用,而不是
mysql:端口:- 3306:3306
我不得不改为
mysql:端口:- 3306
一切都很好。

泊坞窗停止 $(泊坞窗 ps -a -q)
docker rm $(docker ps -a -q)
然后删除任何现有数据,例如 docker volume rm docker_db_data
码头工人组成

同样的问题在这里。 我正在使用 docker 版本 17.05.0-ce,构建 8965be,使用 docker-compose 1.13.0 和 1.22.0。 compose-yml 文件是 3.2。

@KazibweStephen道歉,这不是一个有用的解决方案。 您告诉 docker-compose 为客户端选择一个 _abritrary_ 端口以连接到容器的 mysql 服务。 您不妨告诉 mysql 不要侦听任何端口或完全删除端口配置。

我已经尝试了上面的各种解决方案,包括_重启服务器_。 没有其他容器正在运行,并且 yml 文件中没有冲突。 我记得这适用于旧版本的 docker/compose。 主机上的netstat -anp显示没有监听端口。

如果我完全删除ports部分,则进程启动正常。 然后我使用nsenter ... netstat来验证容器正在侦听正确的端口(在其命名空间中)。 然后我检查netstat以验证默认命名空间没有冲突。 然后我可以使用诸如nc类的实用程序来侦听同一个端口。

我看不出为什么配置不起作用的文档。 结论是 docker-compose 的代理设置有问题。

_难以置信的_。 事实上,我有一个小错误导致了这个问题。 我的配置需要 _two_ 端口,其中一个有错别字,复制另一个。 面掌

netstat | grep 5432 ?

嗨,当我运行这个时,我收到了这条消息..

98808d86b49cff5d 流 0 0 98808d86b6dd9be5 0 0 0 /tmp/.s.PGSQL.5432。 你能帮我做什么吗? 谢谢

在我的情况下,修复只是禁用端口绑定,即将最后一部分更改为:

    ports:
      - 5432

不确定这是否是正确的解决方案,也不确定它是否可以普遍应用于所有用例。

可能是docker-compose本身的问题吗?
以供参考:

$ docker-compose --version
docker-compose version 1.12.0, build b31ff33

这个修复对我有用。

docker-compose -version
docker-compose version 1.23.1, build b02f1306

我的情况略有不同,在这里发帖是为了记录发生这种情况的另一个案例。

当使用docker-compose.ymldocker-compose.override.yml文件时,它们都包含端口映射,其中两个映射的主机端口相同,但容器端口不同,这会导致 docker 尝试分配主机端口两次。

docker-compose.yml:

ports:
  - 8080:8080

docker-compose.override.yml:

ports:
  - 8080:8181

也许这本身就是一个问题,创建覆盖映射会导致重复绑定尝试。 这种情况特别糟糕,因为在您尝试将容器联机之前,没有任何东西在侦听端口。 失败并因此关闭整个组合,导致端口再次未分配。

@lorenzo-pasa 的解决方案对我有用! 我正在使用 docker-compose 和 nginx,运行 ubuntu 操作系统,谢谢老兄。

我很好奇:为什么这个问题关闭了,而许多人(包括我自己)似乎仍然遇到问题? 从不写(例如) 8080:8080并始终只写8080是官方修复吗? 只是要清楚这不是抱怨,我真的很好奇。

@Ezwen同意
我尝试了上面发布的所有建议,但仍然出现错误。
我正在运行 PHPstorm 并尝试在 dockerbox 中 Xdebug 我的应用程序。 启动我的 dockerbox 时,我使用 docker-compose up

端口:
- “9001:9001”

它正确地公开了端口。 (vpnkit.exe 是 Docker 的一部分)
grafik

我看到 vpnkit.exe 正在侦听端口 9001。所以当我现在尝试在 PHPstorm 中启动我的 Xdebug 时,它出现了错误消息
grafik

我不知道为什么我不能告诉 PHPstorm 调试器监听端口 9001,而当我启动我的 docker 容器时它总是被 vpnkit.exe 使用?

谢谢,@lorenzo-pasa! 那正是我的问题,您的解决方案奏效了。 我尝试了很多东西来解决这个问题,但没有结果。 再次感谢你!

我今天遇到了同样的问题(使用postgres容器),尽管尝试了docker-compose downup ,但问题仍然存在。

docker-compose psdocker ps显示了一个空输出。

不过,我可能已经找到了解决方案:

这就是我的postgres服务的定义方式

version: '2.1'

services:

  postgres:
    image: postgres:9.5.4
    env_file:
      - docker-compose.env
    ports:
      - 5432:5432

在我的情况下,修复只是禁用端口绑定,即将最后一部分更改为:

    ports:
      - 5432

不确定这是否是正确的解决方案,也不确定它是否可以普遍应用于所有用例。

可能是docker-compose本身的问题吗?
以供参考:

$ docker-compose --version
docker-compose version 1.12.0, build b31ff33

对我来说,问题是另一个 docker 容器仍在来自不同项目的后台运行。

我通过运行修复:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

我有一个与@maritaria提到的相同的问题。

@freesoft最好为此打开一个新问题。

我在这里尝试了一切,但似乎没有任何效果,然后我这样做了:

须藤 lsof -i -P -n | 格雷普 5432

杀死所有进程
须藤杀

然后它对我有用。

有同样的问题

 Version:           18.09.3
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        774a1f4
 Built:             Thu Feb 28 06:53:11 2019
 OS/Arch:           linux/amd64
 Experimental:      false

docker-proxy进程之一挂了,所以杀死它, systemctl restart docker解决了这个问题。

我运行了 docker system prune (小心这个命令)然后重新启动了 docker,它对我有用。

docker network prune似乎为我解决了这个问题

须藤 lsof -i -P -n | 格雷普 5432

为我工作 ec2 linux 实例

须藤 lsof -i -P -n | 格雷普

对我有用,但我是否必须时不时地杀死进程?

就我而言,我已经在本地运行了一个具有相同端口的 node.js 实例。

当我停止它时, docker-compose up --build开始工作!

就我而言,我重新启动 SO

@Rub21

sudo lsof -i -P -n | grep <port number>

骂使用程序为docker-pr

相应地更新我的搜索关键字后,我遇到了这个
这解决了我无法使用假定未分配但无论如何都已分配的端口来部署服务的问题。

谢谢。

顺便提一句:
就我而言,我认为错误的根源是我在执行docker network prune时进行了硬关机。
我猜 cli 无法完成任务,因此我的 docker/网络路径中有所有那些“不存在的”剩余物。

在我的情况下,这有效https://github.com/docker/for-mac/issues/205#issuecomment -250856158

On linux users have reported that after remove local-kv.db with all containers stoped the problem gets solved.

文件在/var/lib/docker/network/files/local-kv.db

kill -9 $(sudo lsof -i -P -n | grep 8888 | awk '{print $2}')对我有用

不幸的是,“kill -9..”的技巧不起作用。
用僵尸代替 docker-proxy 进程:

docker run -it -p 50000:50000 你好世界
docker:来自守护进程的错误响应:驱动程序在端点 musing_dijkstra 上编程外部连接失败(2afd0e53bb80223bc07650e59bd16b43c6d971828a589db6f43dfa50a7a1ab42):绑定为 0.00.000:5 端口已分配失败。

docker run -it -p 80:80 你好世界
docker:来自守护进程的错误响应:驱动程序在端点 cocky_goldberg 上编程外部连接失败(8dab653c7575c298efea1b808ef2ff16f19bb6c23f51612787e19a434ceeb2ff):绑定 0.0.0.0:80 端口已经失败。

顶部 | 僵尸
任务:共 319 个,1 个运行,181 个睡眠,0 个停止,2 个僵尸

用户名 -r
4.14.35-1844.4.5.el7uek.x86_64

@lorenzo-pasa 我在领事服务方面遇到了同样的问题,你的伎俩对我有用。 感谢您的解决方案。

泊坞窗停止 $(泊坞窗 ps -a -q)
docker rm $(docker ps -a -q)
然后删除任何现有数据,例如 docker volume rm docker_db_data
码头工人组成

@joseph-luketelo(谢谢!)的这个解决方案适用于 MacOS Mojave。 甚至不需要“删除任何现有数据......”。 只需运行前两个命令即可解决。

  • 删除/var/lib/docker/network/files/local-kv.db (关闭和关闭所有内容)不起作用
  • 修剪网络不起作用
  • 删除所有卷和容器不起作用
  • 一起做以上所有事情都没有奏效
  • 杀死占用端口的docker-proxy实例不起作用(netstat 输出中不再显示该端口的任何内容,但仍然显示此错误消息)。
  • 如果我执行上述操作,然后重新启动 docker 服务, docker-compose up无限期挂起。

这种情况几乎每周都会发生在我身上一个月左右,到目前为止,唯一能解决问题的方法就是每次都重新安装 docker。 为什么这是关闭的? 即使进行了上述步骤,这显然是某种错误......

所有提到的解决方案对我都不起作用。

这是有效的:

sudo rm -rf /var/lib/docker
sudo service docker restart # to re-create the db again

我也尝试重新安装 docker 和 docker-compose,但我不知道这一步是否有帮助。 直到我执行了上面提到的步骤,它才起作用。

我今天遇到了同样的问题(使用postgres容器),尽管尝试了docker-compose downup ,但问题仍然存在。

docker-compose psdocker ps显示了一个空输出。

不过,我可能已经找到了解决方案:

这就是我的postgres服务的定义方式

version: '2.1'

services:

  postgres:
    image: postgres:9.5.4
    env_file:
      - docker-compose.env
    ports:
      - 5432:5432

在我的情况下,修复只是禁用端口绑定,即将最后一部分更改为:

    ports:
      - 5432 (this also solve my problem)

不确定这是否是正确的解决方案,也不确定它是否可以普遍应用于所有用例。

可能是docker-compose本身的问题吗?
以供参考:

$ docker-compose --version
docker-compose version 1.12.0, build b31ff33

禁用端口绑定也解决了我的问题

重新构建我的 docker 配置后,我遇到了同样的错误。

ハ➜ docker-compose up
Screen Shot 2020-02-03 at 10 38 30 AM

我试过:
ハ➜ docker-compose down
但仍然面临同样的问题......

ef18b3f0f2864b22e102): Bind for 0.0.0.0:10002 failed: port is already allocated

ERROR: for db  Cannot start service db: driver failed programming external connectivity on endpoint eeschenck_db_1 (a7caadb27e327b901df83bb42fd19bd704224aa03a75ef18b3f0f2864b22e102): Bind for 0.0.0.0:10002 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.

然后我尝试重新启动 Docker 应用程序并退出我的“Visual Studio Code”IDE,它有一个 docker 扩展......

Screen Shot 2020-02-03 at 10 47 23 AM

然后我再次尝试并尝试 netstat 端口..
ハ➜ netstat -n | grep 10002
没有找到该端口的任何内容......之前应该尝试过这个。

ハ➜ docker-compose up

Screen Shot 2020-02-03 at 10 52 16 AM

看起来 Visual Studio Code Docker 扩展可能是我的问题。

你能分享你的 docker-compose 文件配置吗
你需要删除端口镜像

为我工作

docker-compose down
docker network prune
sudo service docker restart
docker-compose up

我今天遇到了同样的问题(使用postgres容器),尽管尝试了docker-compose downup ,但问题仍然存在。

docker-compose psdocker ps显示了一个空输出。

不过,我可能已经找到了解决方案:

这就是我的postgres服务的定义方式

version: '2.1'

services:

  postgres:
    image: postgres:9.5.4
    env_file:
      - docker-compose.env
    ports:
      - 5432:5432

在我的情况下,修复只是禁用端口绑定,即将最后一部分更改为:

    ports:
      - 5432

不确定这是否是正确的解决方案,也不确定它是否可以普遍应用于所有用例。

可能是docker-compose本身的问题吗?
以供参考:

$ docker-compose --version
docker-compose version 1.12.0, build b31ff33

@lorenzo-pasa 谢谢,这个解决方案对我有用。

只需在 Mac 上重新启动 docker 桌面守护程序就可以解决我的问题(Docker 桌面 2.2.0.4)。
似乎在启动时行为不端。

泊坞窗停止 $(泊坞窗 ps -a -q)
在尝试其他修复之前运行此命令,例如 -8080:8080 到 -8080 甚至 docker rm$(...)

我已经重置了我的机器,它又开始工作了。 可能不是一个准确的解决方案,但有效

如果 docker ps 不输出任何内容并且 docker-compose down/up 没有帮助,则检查该端口是否与此命令一起使用:
sudo lsof -i -P -n | grep 9200

如果是,那么只需运行:
sudo service docker restart

有同样的问题。 我做 :

docker-compose down
docker-compose build
docker-compose up -d

但有时会发生错误

ERROR: for xxxxxx  Cannot start service web: driver failed programming external connectivity on endpoint xxxxx (xxxx): Bind for 0.0.0.0:22000 failed: port is already allocated

我无法重新启动 docker,因为另一个容器在那里运行

@KorossGame提出的@mogadanez您可以尝试查找哪个进程已经在使用此端口。

祝你有美好的一天,

@pandaatrail
它的泊坞窗,但它没有帮助,我无法重新启动整个泊坞窗。

@mogadanez如果您无法重新启动
sudo lsof -i -P -n | grep 9200
还要检查 docker 容器是否没有使用与以下相同的输入端口:
docker ps

它根本行不通。 lsof不显示正在使用的任何端口。 删除图像并重新创建整个堆栈不起作用。 重新启动 docker 不起作用。 唯一有效的是重新启动系统。 祝你好运。

你好,
你只需要验证是否有另一个服务使用相同的端口,

如果您使用的是 Windows,则需要运行以下命令:

  1. docker-compose down
  2. netstat -ano | findstr :port (例如netstat -ano | findstr :18080
  3. taskkill /pid the_pid_of_the_port /f
  4. docker-compose up

就是这样😄

@olknownsaoui我尝试了所有这些,但对于 mac。 没有解决方案有效。

@gabrielhpugliese您是否尝试过查看端口是否正在使用中?

@olknownsaoui我尝试了所有这些,但对于 mac。 没有解决方案有效。

我在 Ubuntu 上有类似的撰写行为。 这是副作用,基于错误的 iptables 设置。 应该手动检查和释放端口转换。 不记得 MacOS 的正确语法。 用蔷薇石找到它应该不难。

我不明白为什么我需要所有这些,而问题就消失了。 它
不是我正在构建的新设置,也没有创建新设置
容器/服务。 我刚刚用 up -d 重新创建了我的服务器容器
- 建造。 真的很奇怪。

Vitaly-zverev通知@github.com schrieb am Mi.,2020 年 8 月 19 日,
17:27:

@olknownsaoui https://github.com/olknownsaoui我尝试了所有这些,但是
对于 Mac。 没有解决方案有效。

我在 Ubuntu 上有类似的撰写行为。 这是副作用,基于
错误的 iptables 设置。 端口翻译应该检查和发布
手动。 不记得 MacOS 的正确语法。 不应该这么难
通过玫瑰石找到它。


你收到这个是因为你被提到了。
直接回复本邮件,在GitHub上查看
https://github.com/docker/compose/issues/4950#issuecomment-676495723
或取消订阅
https://github.com/notifications/unsubscribe-auth/AAJR3UTBMGLV2ECW5GCNQDTSBPVNXANCNFSM4DQLFGPQ
.

我不明白为什么我需要所有这些,而问题就消失了。 这不是我正在构建的新设置,也没有创建新的容器/服务。 我只是用 up -d --build 重新创建了我的服务器容器。 真的很奇怪。 Vitaly-zverev [email protected] schrieb am Mi., 19. Aug. 2020, 17:27:

@olknownsaoui https://github.com/olknownsaoui我尝试了所有这些,但对于 mac。 没有解决方案有效。 我在 Ubuntu 上有类似的撰写行为。 这是副作用,基于错误的 iptables 设置。 应该手动检查和释放端口转换。 不记得 MacOS 的正确语法。 用蔷薇石找到它应该不难。 — 您收到此消息是因为有人提到了您。 直接回复本邮件,在GitHub上查看< #4950(评论) >,或者退订https://github.com/notifications/unsubscribe-auth/AAJR3UTBMGLV2ECW5GCNQDTSBPVNXANCNFSM4DQLFGPQ

嗯,好吧,据我所知,应该在 docker 与网络翻译集成的地方分析它们的根本原因。 它依赖于操作系统并且有很多含义,
就像任何集成错误一样。

得到了很多好的答案。 我发现问题是我在 Catalina 上安装的另一个应用程序(Sky Go),即使它已关闭,它也会以某种方式导致端口冲突。
值得检查此类应用程序(包括 Skype)不会导致问题。

我也面临同样的问题。 我正在使用端口 8080,每次尝试运行 docker 时,它都显示端口 8080 已在使用中。 然后我检查是否有任何其他应用程序阻止了该端口但没有找到任何东西。
然后按照以下步骤操作。

  • docker-compose down(停止我的容器)
  • docker ps(在我的情况下检查任何容器正在运行,我发现 hasura graphql 正在运行)
  • docker 容器停止 [Container_ID]
  • docker container rm [Container_ID](在我的情况下,我也删除了容器)
    在按照上述过程之后,我的 docker 工作了

如果您使用的是 WSL2,请检查是否启用了 Hyper-V。 如果不是,只需启用它,就可以了。

操作系统重启帮助了我

此页面是否有帮助?
0 / 5 - 0 等级