Docker-绑定0.0.0.0:4000失败:端口已分配
我第一次使用docker,我正试图实现这一点- 在某个阶段,我试图通过这个命令与localhost连接-Docker-绑定0.0.0.0:4000失败:端口已分配,docker,port,Docker,Port,我第一次使用docker,我正试图实现这一点- 在某个阶段,我试图通过这个命令与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
$ 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.
在启动使用同一端口的新容器之前,您需要确保已终止先前启动的容器
docker container ls
docker rm -f <container-name>
docker容器ls
码头工人rm-f
向IgorBeaz致敬,您需要停止运行当前容器。为此,您将知道当前容器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
以上两个答案是正确的,但对我来说并不适用
docker容器ls
docker container ls-a
,之后它显示了之前退出并运行的所有进程docker-stop
或docker-container-stop
不起作用docker container ls-a
,但这个过程不存在停止集装箱运输对我也不起作用。我在
docker compose.yml
中为任何有docker compose
问题的人更改了端口。
当您有多个具有类似服务的项目(即,在不同文件夹中)时,您需要在每个其他项目中运行
docker compose stop
。我在docker compose方面也遇到过同样的问题:
docker-compose down
然后我执行了一个lsof
命令来查找使用端口的进程(对我来说是端口9000)
最后,我“终止”了进程(在我的例子中,它是一个VSCode扩展):
kill-9
docker ps
将显示docker上运行的容器列表。找到在所需端口上运行的端口,并记下其PID
使用以下命令停止并移除该容器:
docker stop PID
docker rm PID
sudo service docker stop
sudo rm -f /var/lib/docker/network/files/local-kv.db
现在运行
docker compose up
,您的服务应该在释放了所需端口后运行。我尝试了上述所有答案,但都无效,在我的情况下,即使docker container ls
也没有显示任何容器正在运行。问题似乎是由于docker代理仍在使用端口,尽管没有容器在运行。就我而言,我使用的是ubuntu。以下是我尝试解决的问题,只需运行以下两个命令:
docker stop PID
docker rm PID
sudo service docker stop
sudo rm -f /var/lib/docker/network/files/local-kv.db
它可能与
docker compose.yml
和docker compose.override.yml
中指定的相同端口冲突,或者与使用环境变量显式指定的相同端口冲突
我有一个
docker compose.yml
,其中容器上的端口是使用环境变量指定的,还有一个docker compose.override.yml
,其中一个端口是明确指定的。显然,docker试图在同一个容器上打开这两个容器docker容器ls-a既没有列出,因为容器无法启动并列出端口。快速修复是刚刚重启的docker:
sudo服务码头站
sudo服务docker启动
在我的情况下,没有可以杀死的过程
更新docker修复了该问题。如果您正在使用docker Desktop,您可以退出docker Desktop,然后重新启动它。它为我解决了问题为我解决了集装箱没有出现在运行中的问题,因此没有使用9010端口(在我的情况下),但Docker仍然抱怨
我不想重置Docker(适用于Windows),因此我所做的只是:
移除网络(我知道在容器使用该网络之前,该网络的端口有问题(9010)docker network ls
docker network rm blablabla(或id)
我实际上使用了一个新的网络,而不是旧的(有缺陷的)网络,但不应该需要
重新启动Docker
这是它对我唯一有效的方式。我无法解释它,但不知何故,“旧”网络仍然绑定到该端口(9010),Docker继续“阻止”它(抱怨它)即使从存档中删除了所有Docker(-a)选项,启动userland proxy:Bind for 0.0.0.0:8080失败时仍会出现此错误:端口已分配。可能有其他东西正在占用此端口。查找并在不必要时终止此进程,您的端口将是免费的。根据yamenk接受的答案的建议,显示未使用任何容器。此答案帮助我跟踪关闭使用端口的进程。如果此答案也包含检查活动docker包含的信息,则它应该是接受的答案。“端口已分配”并不总是意味着“docker容器已在运行”我也发生了同样的事情,但有点相反-docker compose.yml
明确指定了端口,docker compose.override.yml
有一个不同的显式设置,加上一个env var告诉应用程序使用新端口。修复方法是在docker compose.yml
文件中注释掉端口是否在本地使用docker compose(即:使用覆盖文件).docker compose.override.yml中为应用程序定义的env var从未使用过,因为应用程序从未启动过-这似乎只是两个compose文件中的端口设置不匹配。请记住,删除local-kv.db也会删除所有用户定义的网络。fi