Docker:守护进程错误响应:端口不可用:侦听tcp 0.0.0.0:5000:绑定:地址已在使用中。

22

我是新手,正在尝试参加DigitalOcean的此教程,但当我执行docker run -p 5000:5000 flask_demo:v0时,出现以下错误。

docker:

Error response from daemon: Ports are not available: listen tcp 0.0.0.0:5000: bind: address already in use.

请帮助我


2
另一个应用程序已经在您的开发机上运行并监听端口5000。 - rzlvmp
另一个服务正在使用该端口。请使用另一个端口“-p 5001:5000”或使用“netstat”查找并停止使用该端口的服务。 - araisch
对于MacOS,这个方法适用于我 https://medium.com/pythonistas/port-5000-already-in-use-macos-monterey-issue-d86b02edd36c - Salma Gomaa
6
大家好,如果您已经将您的Mac OS更新到“Monterey”,看起来Mac OS Monterey上的“控制中心”正在监听5000端口。您可以通过在“共享”系统偏好设置中关闭“AirPlay接收器”来停止它的监听。https://developer.apple.com/forums/thread/682332 - surender pal
1
可能的解决方案:
  1. 使用 lsof -i tcp:5000 查找正在使用该端口的进程,并通过运行 kill -9 <ProcessID> 来终止该进程。
  2. 如果运行上述命令时出现两个进程,则需要在“系统偏好设置”->“共享”下关闭“Airplay”。
  3. 否则,更改应用程序应运行的端口。
- Ramya Musunuru
3个回答

21

然后您只需绑定另一个端口即可

docker run -p 5001:5000 flask_demo:v0

-p 5001:5000基本上意味着将我的主机的端口5001与容器中的端口5000绑定。由于端口5000已经在您的主机上使用,所以您可以绑定到另一个端口,例如端口5001。


5
最好找出已经绑定到该端口的内容。它很可能是同一容器的另一个实例,而用户并不知道正在运行(当使用Docker刚开始时很容易出现这种情况)。 - SiHa
1
谢谢,这很有帮助。现在我可以看到我的简单的“Hello World”正在本地5001上运行。 - John Cult
@SiHa,你可以在终端中使用 kill -9 port: 5000 命令来结束该端口的进程。 - ken

5
你可能之前已经运行过这个应用程序。当一个 Docker 容器退出时,它仍然存在于你的机器上,并且端口已被分配。
要查看你有哪些容器,请运行以下命令:
docker ps -a

您很可能会看到列出了您的旧容器,并且它正在使用5000端口。 请使用以下命令删除:

docker rm <container name>

现在端口再次可用。
如果您认为不需要在容器退出后查看它,可以在docker运行命令中添加--rm参数,它将在退出时自动删除。像这样:
docker run -p 5000:5000 --rm flask_demo:v0

1

先找出哪个进程占用了该端口: ss -aultnp | grep 5000

获取程序:pid ps -ef | grep pid

找到占用该端口的程序


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