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

时间:2017-09-12 12:37:21

标签: docker port

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

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

$ curl http://localhost:4000

显示此错误 -

curl: (7) Failed to connect to localhost port 4000: Connection refused

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

$ docker-machine ip default
$ curl http://192.168.99.100:4000

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

$ docker run -p 4000:80 anibar/get-started:part1

但是,我收到了这个错误

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.

似乎端口已分配,所以请告诉我如何解决这个问题,请帮助我。 非常感谢:)

17 个答案:

答案 0 :(得分:39)

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

docker container ls
docker rm -f <container-name>

答案 1 :(得分:9)

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

$ docker container ls

你会得到类似的东西:

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   

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

$ docker stop 12a32e8928ef

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

$ docker run -p 4000:80 friendlyhello

答案 2 :(得分:9)

快速解决方法是重启docker

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

答案 3 :(得分:4)

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

-sudo service docker stop

-sudo rm -f /var/lib/docker/network/files/local-kv.db

答案 4 :(得分:4)

就我而言,没有要杀死的进程。

更新 docker 解决了这个问题。

答案 5 :(得分:2)

我这样解决了:

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

docker-compose down

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

sudo lsof -i -P -n | grep 9000

最后,我“杀死”了该进程(在我的情况下,这是一个VSCode扩展名):

kill -9 <process id>

答案 6 :(得分:2)

可能与 docker-compose.ymldocker-compose.override.yml 中指定的相同端口或使用环境变量明确指定的相同端口发生冲突。

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

答案 7 :(得分:2)

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

  1. 我不断看到docker container ls enter image description here
  2. 如下所示的空白
  3. 然后我尝试docker container ls -a,然后显示先前退出并正在运行的所有进程。
  4. 然后docker stop <container id>docker container stop <container id>无效
  5. 然后我尝试了docker rm -f <container id>并成功了。
  6. 现在我尝试了docker container ls -a,但此过程不存在。

答案 8 :(得分:1)

我在docker-compose上遇到了同样的问题:

  1. 杀死了docker-proxy进程。
  2. 重新启动docker
  3. 再次启动docker-compose。

答案 9 :(得分:1)

停止容器对我也不起作用。我更改了docker-compose.yml中的端口。

答案 10 :(得分:0)

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

stop并使用以下命令删除该容器命令
{docker stop PID
docker rm PID
现在运行docker-compose up,您的服务应该运行,因为您现在已经释放了所需的端口。

答案 11 :(得分:0)

对于docker-compose遇到此问题的任何人。 如果您有多个具有相似服务的项目(即,在不同的文件夹中),则需要在其他项目的每个项目中运行docker-compose stop

答案 12 :(得分:0)

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

答案 13 :(得分:0)

对我来说,容器没有显示在运行,所以没有使用端口 9010(在我的情况下)但 Docker 仍然抱怨。

我不想重置我的 Docker(适用于 Windows),所以我解决它的方法很简单:

  1. 移除网络(我知道在容器使用此网络之前,有问题的端口 (9010) docker network ls docker network rm blabla (or id)
  2. 我实际上使用的是新网络而不是旧的(有问题的)网络,但应该不需要
  3. 重启 Docker

这是对我有用的唯一方法。我无法解释,但不知何故,“旧”网络仍然绑定到该端口(9010)并且 Docker 继续“阻止”它(抱怨它)

答案 14 :(得分:0)

在 Linux 上,您可以运行 sudo netstat -tulpn 来查看当前在该端口上侦听的内容。然后,您可以选择将该进程或您的 Docker 容器配置为绑定到不同的端口以避免冲突。

答案 15 :(得分:0)

当我使用 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.

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

$ docker container ls
$ docker stop [CONTAINER ID]

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

$ docker run -v $PWD/vueDemo:/usr/share/nginx/html -p 8080:80 -d nginx:alpine

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

答案 16 :(得分:-1)

不要忘记最简单的解决方法......

<块引用>

重新启动计算机。

我已经尝试了上述大部分方法,但仍然无法修复。然后只需restart my Mac,然后一切恢复正常。