docker:驱动程序在端点webserver上编程外部连接失败

Jas*_*rne 49 macos docker

我在Mac上.尝试运行docker示例请遵循以下文档:https://docs.docker.com/docker-for-mac/ 这是我的命令:

docker run -d -p 80:80 --name webserver nginx
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

docker: Error response from daemon: driver failed programming external connectivity on endpoint webserver (bd57efb73c738e3b271db180ffbee0a56cae86c8193242fbc02ea805101df21e): Error starting userland proxy: Bind for 0.0.0.0:80: unexpected error (Failure EADDRINUSE).
Run Code Online (Sandbox Code Playgroud)

需要帮忙.

BMi*_*tch 52

从错误消息中,EADDRINUSE指示端口80已在docker VM上使用,或者可能直接在笔记本电脑上使用.您可以停止在该端口上运行的任何内容,也可以更改Docker中使用的端口命令.要更改为外部端口8080,请使用:

docker run -d -p 8080:80 --name webserver nginx
Run Code Online (Sandbox Code Playgroud)

  • 重新启动 docker 服务 - 是最快的步骤,因此应该首先进行测试 (7认同)
  • 就我而言,它没有明确提及有问题的端口,但由于我公开了一系列端口(-p 1000-2000:1000-2000),我怀疑这就是原因 (2认同)
  • @IlyaKolesnikov 是的,就像锤子是安装干墙螺钉的最快方法一样。我仍然想检查什么正在使用该端口,如果停止 docker 修复了它,那么它是一个正在侦听该端口的容器,并且停止一个容器可以解决该问题,而不会杀死其他所有容器。使用“docker ps”查看哪些容器正在端口上运行/侦听。 (2认同)

E.N*_*N.D 43

尝试重启docker.这通常对我有用.

  • 有时重新启动计算机也有帮助。 (5认同)
  • 这是最好的起点,尤其是在您确定没有使用该端口的情况下。 (4认同)

Cha*_*nka 11

尝试重新启动 docker 服务。它在 99% 的时间里都有效。

service docker restart
Run Code Online (Sandbox Code Playgroud)

如果这没有按预期工作,请尝试重新启动您的电脑,然后使用上述命令重新启动 docker 服务。

如果上述方法均无效,请尝试将暴露的端口更改为另一个应该可以工作的未使用端口。

docker run -d -p 81:80 --name webserver nginx
Run Code Online (Sandbox Code Playgroud)

  • docker-compose 在更改为“3307:3307”后运行。这是因为端口“3306”已被阻止该端口的本地 mysql 容器使用。我尝试了“3307:3306”,它也有效,是的,谢谢。 (2认同)

小智 11

第一次,当我制作一个 docker 简单的 web 应用程序时,我也遇到了同样的问题。

只需您可以尝试以下步骤来解决问题,也可以详细了解您遇到问题的原因。

步骤 1:使用以下命令检查所有正在运行的容器:

docker ps
Run Code Online (Sandbox Code Playgroud)

第 2 步:找出在同一端口上运行的容器的容器 ID,您正在尝试访问。

在此处输入图片说明

第 3 步:使用以下命令停止在同一端口上运行的容器:

docker stop <container id> 
Run Code Online (Sandbox Code Playgroud)

第 4 步:再次构建容器:

docker build -t DockerID/projectName .
Run Code Online (Sandbox Code Playgroud)

第 5 步:再次尝试使用端口映射在同一端口上运行您的容器。

docker run -p 8080:8080 DockerID/projectName
Run Code Online (Sandbox Code Playgroud)


smi*_*hra 10

我的一个容器遇到了同样的问题。我尝试了所有方法,但无济于事,我尝试了以下方法,并再次成功启动了容器

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

  • 如果运行上述命令后找不到网络,请执行“sudo docker system prune”。然后 docker-compose up 应该可以正常运行。 (3认同)
  • 在Windows中,您可以在`C:\ ProgramData \ Docker \ network \ files`中找到该文件。 (2认同)

Som*_*Som 9

停止所有正在运行的容器,docker ps -a -q然后停止机器上的 Docker 并重新启动它。


小智 9

检查端口 80 上现在有什么 -sudo ss -tulpn | grep :80

您可能正在运行 apache2。你可以检查一下 -sudo service apache2 status 如果是这样 -sudo service apache2 statop


小智 8

如果您尝试了上述所有解决方案但仍然遇到问题,您可以为 Linux 用户手动终止 LISTEN 端口,如下所示

  1. sudo lsof -i -P -n | sudo lsof -i -P -n | grep 听 在此输入图像描述
  2. sudo Kill -9 <process_pid> (例如 sudo Kill -9 28563 28575 28719 28804)


小智 6

试试这个命令:

sudo service docker restart
Run Code Online (Sandbox Code Playgroud)

如果没有帮助,请重新启动服务器。


web*_*.io 5

最近,这个问题在Windows上开始发生很多。您可以尝试重新启动docker,也可以在Windows关闭之前手动停止docker-docker在重启时干净地启动。在2018年7月24日docker问题已经开放,进一步的细节可以在https://github.com/docker/for-win/issues/1967找到