Docker - 绑定0.0.0.0:4000失败:端口已经分配

Ani*_*rua 35 port docker

我第一次使用docker而且我试图实现这个 - https://docs.docker.com/get-started/part2/#tag-the-image

在一个阶段,我试图通过此命令与localhost连接 -

$ curl http://localhost:4000
Run Code Online (Sandbox Code Playgroud)

显示此错误 -

curl: (7) Failed to connect to localhost port 4000: Connection refused
Run Code Online (Sandbox Code Playgroud)

但是,我通过以下代码解决了这个问题 -

$ docker-machine ip default
$ curl http://192.168.99.100:4000
Run Code Online (Sandbox Code Playgroud)

之后一切都很顺利,但在最后一部分,我试图按照教程使用以下行来运行应用程序...

$ docker run -p 4000:80 anibar/get-started:part1
Run Code Online (Sandbox Code Playgroud)

但是,我收到了这个错误

C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: driver failed programming external connectivity on endpoint goofy_bohr (63f5691ef18ad6d6389ef52c56198389c7a627e5fa4a79133d6bbf13953a7c98): Bind for 0.0.0.0:4000 failed: port is already allocated.
Run Code Online (Sandbox Code Playgroud)

看来端口是分配的,所以你能告诉我如何解决这个问题,请帮助我..非常感谢:)

yam*_*enk 62

在启动使用相同端口的新容器之前,您需要确保已启动的先前容器已被终止.

docker container ls
docker rm -f <container-name>
Run Code Online (Sandbox Code Playgroud)

  • 我收到“docker container ls”的空列表,但端口仍然被占用。 (7认同)
  • 专业提示:“docker ps”与“docker container ls”的作用相同 (7认同)
  • 您可以将 `docker container ls` 命令中的 **CONTAINER ID** 粘贴到 `&lt;container-name&gt;` 位置。 (6认同)

Ale*_*ara 24

我是这样解决的:

首先,我停止了所有正在运行的容器:

docker-compose down
Run Code Online (Sandbox Code Playgroud)

然后我执行了一个lsof命令来使用端口查找进程(对我来说是端口 9000)

sudo lsof -i -P -n | grep 9000
Run Code Online (Sandbox Code Playgroud)

最后,我“杀死”了这个过程(在我的例子中,它是一个 VSCode 扩展):

kill -9 <process id>
Run Code Online (Sandbox Code Playgroud)

  • 按照 yamenk 接受的答案的建议显示没有容器在使用中。这个答案帮助我追踪使用该端口的过程。如果此答案还包含用于检查活动 docker 包含的信息,那么它应该是可接受的答案。“端口已分配”并不总是意味着“docker 容器已在运行” (3认同)

Fah*_*ari 21

我尝试了上述所有答案,但都没有奏效,就我而言,甚至docker container ls没有显示任何容器正在运行。看起来问题是由于 docker 代理仍在使用端口,尽管没有容器在运行。就我而言,我使用的是 ubuntu。这是我尝试并解决的问题,只需运行以下两个命令:

sudo service docker stop
sudo rm -f /var/lib/docker/network/files/local-kv.db
Run Code Online (Sandbox Code Playgroud)

  • 在我的系统上,这个问题是通过“systemctl restart docker”解决的。我不需要运行任何其他命令。 (15认同)
  • @OlegAbrazhaev 如果你有 Docker Desktop,那么只需从那里重新启动即可 (6认同)
  • 请记住,删除 local-kv.db 也会删除所有用户定义的网络。 (4认同)
  • 在 Mac 版 Docker Desktop 中,我单击“故障排除菜单”(错误图标),然后单击“重新启动 Docker Desktop”。 (4认同)

小智 17

向IgorBeaz致敬,你需要停止运行当前的容器.为此,您将了解当前的CONTAINER ID:

$ docker container ls
Run Code Online (Sandbox Code Playgroud)

你会得到类似的东西:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
12a32e8928ef        friendlyhello       "python app.py"     51 seconds ago      Up 50 seconds       0.0.0.0:4000->80/tcp   romantic_tesla   
Run Code Online (Sandbox Code Playgroud)

然后你通过以下方式停止容器:

$ docker stop 12a32e8928ef
Run Code Online (Sandbox Code Playgroud)

最后,你尝试做你想做的事,例如:

$ docker run -p 4000:80 friendlyhello
Run Code Online (Sandbox Code Playgroud)

  • 容器 ID 的前三个字符足以停止容器,因此停止容器更简单,如“$ docker stop 12a” (3认同)

小智 14

在 Linux 上“sudo systemctl restart docker”为我解决了这个问题


小智 13

当我使用nginx docker镜像时,我也遇到了这个错误:

docker: Error response from daemon: driver failed programming external connectivity on endpoint recursing_knuth (9186f7d7f523732b99d3510029cde9679f3f3fe7b7eb5f612d54c4aacea58220): Bind for 0.0.0.0:8080 failed: port is already allocated.
Run Code Online (Sandbox Code Playgroud)

我使用以下命令解决了它:

$ docker container ls
$ docker stop [CONTAINER ID]
Run Code Online (Sandbox Code Playgroud)

然后,再次运行这个 docker 容器(像这样)就可以了:

$ docker run -v $PWD/vueDemo:/usr/share/nginx/html -p 8080:80 -d nginx:alpine
Run Code Online (Sandbox Code Playgroud)

你只需要停止之前的docker容器即可。


Dev*_*mek 10

快速修复是 ?? 只需重新启动docker

  1. sudo service docker stop
  2. sudo service docker start


J. *_*Doe 9

如果您正在使用 Docker-Desktop,您可以退出 Docker-Desktop,然后重新启动它。它为我解决了问题。


Aks*_*ain 8

docker ps将显示 docker 上运行的容器列表。找到在您所需端口上运行的端口并记下其 PID。

使用以下命令停止并删除该容器:

docker stop PID
docker rm PID
Run Code Online (Sandbox Code Playgroud)

现在运行docker-compose up,您的服务应该在您释放所需端口后运行。


pau*_*aul 7

以上两个答案是正确的,但对我不起作用。

  1. 我一直看到下面的空白 docker container ls在此处输入图片说明
  2. 然后我尝试了一下,然后docker container ls -a显示了先前退出并运行的所有进程。
  3. 然后docker stop <container id>还是docker container stop <container id>没用
  4. 然后我尝试了,docker rm -f <container id>并且成功了。
  5. 现在,我尝试了docker container ls -a此过程,但不存在此过程。

  • 即使从存档(-a)选项中删除了所有泊坞窗后,我仍然收到此错误启动用户级代理时出错:为0.0.0.0:8080绑定失败:端口已分配。 (2认同)

KIA*_*EED 7

我在使用 docker-compose 时遇到了同样的问题:

  1. 杀死 docker-proxy processe 。
  2. 重启泊坞窗
  3. 再次启动 docker-compose。


eve*_*man 5

对于任何有这个问题的人docker-compose。当您有多个项目(即在不同文件夹中)具有类似服务时,您需要docker-compose stop 其他每个项目中运行。


Cha*_*lie 5

它可能与指定的相同端口和docker-compose.yml/docker-compose.override.yml或使用环境变量显式指定的相同端口发生冲突。

我有一个docker-compose.yml使用环境变量指定的容器上的端口,以及docker-compose.override.yml一个显式指定的相同端口之一。显然,docker 试图在同一个容器上打开两者。docker container ls -a两者均未列出,因为容器无法启动并列出端口。


小智 5

对于 Windows; 我杀死了docker使用的每个进程并重新启动了服务上的docker服务。我的容器现在正在工作。它与 Docker 仍在使用的端口有关,即使您当时没有使用。