Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker-绑定0.0.0.0:4000失败:端口已分配_Docker_Port - Fatal编程技术网

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

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

我第一次使用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
在那之后,一切都很顺利,但在最后一部分中,我尝试根据教程使用以下行运行应用程序

$ 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 rm-f,它成功了
  • 现在,我尝试了
    docker container ls-a
    ,但这个过程不存在

  • 停止集装箱运输对我也不起作用。我在
    docker compose.yml
    中为任何有
    docker compose
    问题的人更改了端口。
    当您有多个具有类似服务的项目(即,在不同文件夹中)时,您需要在每个其他项目中运行
    docker compose stop

    我在docker compose方面也遇到过同样的问题:

  • 已终止docker代理进程
  • 重新启动docker
  • 再次启动docker编写
  • 我是这样解决的:

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

    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