我第一次使用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.
似乎端口已分配,所以请告诉我如何解决这个问题,请帮助我。 非常感谢:)
答案 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:
sudo service docker stop
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.yml
和 docker-compose.override.yml
中指定的相同端口或使用环境变量明确指定的相同端口发生冲突。
我有一个 docker-compose.yml
带有使用环境变量指定的容器上的端口,还有一个 docker-compose.override.yml
带有明确指定的相同端口之一。显然 docker 试图在同一个容器上打开两者。 docker container ls -a
未列出,因为容器无法启动并列出端口。
答案 7 :(得分:2)
以上两个答案是正确的,但对我不起作用。
答案 8 :(得分:1)
我在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),所以我解决它的方法很简单:
docker network ls
docker network rm blabla (or id)
这是对我有用的唯一方法。我无法解释,但不知何故,“旧”网络仍然绑定到该端口(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
,然后一切恢复正常。