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

时间:2016-09-15 09:49:28

标签: macos docker docker-compose

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

docker run -d -p 80:80 --name webserver nginx

但是我收到了这个错误:

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).

需要帮助。

13 个答案:

答案 0 :(得分:43)

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

docker run -d -p 8080:80 --name webserver nginx

答案 1 :(得分:23)

尝试重新启动docker。通常对我有用。

答案 2 :(得分:5)

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

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

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

docker ps

步骤2:找出您要访问的同一端口上运行的容器的容器ID。 enter image description here

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

docker stop <container id> 

第4步:再次构建容器:

docker build -t DockerID/projectName .

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

docker run -p 8080:8080 DockerID/projectName

答案 3 :(得分:4)

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

中找到更多详细信息。

答案 4 :(得分:4)

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

service docker restart

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

如果以上方法均无效,请尝试将裸露的端口更改为其他应使用的未使用的端口。

docker run -d -p 81:80 --name webserver nginx

答案 5 :(得分:3)

我的一个容器遇到了同样的问题。我尝试了所有的东西,但是当没有任何效果时,我尝试了以下内容并成功启动了容器

 - sudo service docker stop
 - sudo rm /var/lib/docker/network/files/local-kv.db
 - sudo service docker start

答案 6 :(得分:1)

这似乎是Windows“快速启动”的不兼容问题,如下所述:(只需重新启动docker服务),它可能会起作用。

https://github.com/docker/for-win/issues/2722

这是由于与Docker和fastboot不兼容引起的。您可以确保关闭Windows之前停止所有容器,也可以通过执行以下操作在Windows的电源设置中禁用快速启动:

CTRL+R > "powercfg.cpl" > "Choose what the power buttons do" > "Change settings that are currently unavailable" > Deselect "Turn on fast start-up"

如果您愿意,也可以在powershell中使用单个命令禁用快速启动:

Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power\' -Name HiberbootEnabled -Value 0

答案 7 :(得分:1)

尝试以下命令:

sudo service docker restart

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

答案 8 :(得分:0)

windows用户:docker description

  

在Windows系统上,CTRL + C不会停止容器。所以,第一种   CTRL + C返回提示(或打开另一个外壳),然后键入   docker container ls列出正在运行的容器,其次是docker   停止容器以停止容器。   否则,当您尝试执行以下操作时,将从守护程序获得错误响应:   在下一步中重新运行容器。

我遇到了同样的问题,我认为使用CTRL + C可以停止容器,但事实并非如此,上述答案之所以有效,是因为它们都停止了容器,重新启动了docker或明确地停止了容器。

我更喜欢:

docker container ls #list containers running
docker stop [container id] #replace [container id] with the container id running

答案 9 :(得分:0)

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

答案 10 :(得分:0)

就我而言,端口80是Web服务器的默认端口,因此受到保护。我将绑定更改为端口60:8080,以确保没有更深层次的问题。将绑定更改为其他端口后,我可以执行docker run并在浏览器中的Advanced Customization上点击它

答案 11 :(得分:0)

立即检查端口80上的内容-sudo ss -tulpn | grep :80

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

答案 12 :(得分:0)

对我来说,一个简单的

ddev poweroff

修复了这个问题。