启动用户空间代理时出错:监听TCP4 0.0.0.0:80: 绑定错误:地址已在使用中。

16

我正在尝试按照 Docker 初学者教程(https://docs.docker.com/get-started/)进行操作。

当我运行以下命令时:

$ docker run -d -p 80:80 docker/getting-started

出现了以下错误:

docker:Error response from daemon: driver failed programming external connectivity on endpoint suspicious_murdock (863f389a032ea76d187c4387701b9eb0b6d4de4d0a9ed414616fa6b4715346ab): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use.

我尝试使用以下命令删除所有 Docker 容器:docker rm -fv $(docker ps -aq) 但是没有任何作用。

我该怎么办?

6个回答

23

我需要停止apache2在80端口的运行 - sudo service apache2 stop


1
我遇到了类似的问题,但是我在端口80上运行的服务不是Apache,而是Nginx。为了解决这个问题,我运行了sudo systemctl stop nginx - undefined

8

为什么会出现这个错误?

这个错误意味着你有一个进程监听在端口80上(默认的HTTP端口)。这可能是某种服务器,如apache/nginx/lighttpd。
其他答案建议关闭数据库(mysql/mariadb),但如果已正确配置,则它们将使用不同的端口(通常是3306)。这意味着停止数据库可能无法解决问题,因为它们未使用端口80。

如何找出是什么导致了这个错误?

可以从这里找到方法:
在终端中输入以下命令(需要使用sudo,以便显示root进程):

sudo lsof -i :80

你应该得到类似于这样的结果:
COMMAND     PID       USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
lighttpd   1713   www-data    4u  IPv6  36989      0t0  TCP *:http (LISTEN)
lighttpd   1713   www-data    5u  IPv4  36990      0t0  TCP *:http (LISTEN)
firefox-b 23384  your-user  150u  IPv4 122957      0t0  TCP pop-os:37322->ef-in-f94.1e100.net:http (ESTABLISHED)
firefox-b 23384  your-user  174u  IPv4 122155      0t0  TCP pop-os:37314->ef-in-f94.1e100.net:http (ESTABLISHED)

请注意末尾的 (LISTEN)(ESTABLISHED)。这里的罪魁祸首是 lighttpd 命令,它是一个服务器程序。此外,lighttpd 的用户是 www-data,而不是您自己,所以如果没有使用 sudo,它就不会显示。
现在,要停止它,请使用以下命令:
sudo service stop lighttpd

在这里,你需要将lighttpd替换为相应的命令(当然,你需要知道自己在做什么,以免意外将网站下线)。


7

或者您可以使用不同的端口,例如 docker run -d -p 8080:80 docker/getting-started。这样您就不需要停止在主机上运行的apache2。


5

如果您更改了端口,仍然遇到相同的问题,尤其是在Ubuntu 18上,请尝试停止Apache服务器和MySQL/MariaDB端口,如果您进一步遇到MySQL/MariaDB端口已被使用的情况,请尝试以下两个命令。

sudo service apache2 stop

sudo service mysql stop

sudo service mariadb stop

1
由于端口80已被占用,问题很可能是您留下了一个服务,例如NginxApache。为了解决这个问题,我建议您首先尝试以下方法:
sudo systemctl stop nginx

如果这个失败了,那就试试:
sudo service apache2 stop

如果其中一个有效,请尝试运行您的Docker容器。

0

我在多次删除我的 Jenkins 镜像和容器后遇到了类似的问题。只需重新启动 Docker,它就能正常工作:

sudo systemctl restart docker


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接