当我在Docker项目中运行Docker -compose up时,它失败了,并显示以下消息:

启动userland代理时错误:监听tcp 0.0.0.0:3000:绑定:地址已在使用

netstat -pna | grep 3000

显示了这个:

tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      -  

我已经试过docker-compose down了,但没用。


当前回答

我多次遇到同样的问题。重新启动docker似乎可以做到这一点

其他回答

在某些情况下,在停止容器或杀死进程之前对问题执行更深入的调试是至关重要的。

考虑以下清单:

1)检查当前的docker编写环境 执行docker-compose ps命令,如果端口正在被其他容器使用,则使用docker-compose stop <service-name-in- composition -file>命令停止端口,或者使用rm命令删除端口。

2)检查当前工作区外运行的容器 运行docker ps查看主机下运行的所有容器的列表。 如果您发现该端口正在被其他容器使用,您可以使用docker stop <container-id>来停止它。 (*)因为你不在原始组合环境的范围内——首先使用docker inspect来收集关于你即将停止的容器的更多信息是一个很好的做法。

3)检查端口是否被主机上的其他进程占用 例如,端口为6379,运行如下命令:

$ sudo netstat -ltnp | grep ':6379'
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      915/redis-server 12 
tcp6       0      0 ::1:6379                :::*                    LISTEN      915/redis-server 12

(*)您也可以使用lsof命令,该命令主要用于检索各种进程打开的文件信息(我建议在此之前运行netstat)。

因此,在输出以上的情况下,PID为915。现在你可以运行:

$ ps j 915
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    1   915   915   915 ?           -1 Ssl    123   0:11 /usr/bin/redis-server 127.0.0.1:6379

并查看父进程的ID (PPID)和执行命令。 您也可以执行:$ pstrree -s <PID>命令来可视化显示该进程及其相关进程。

在我们的例子中,我们可以看到进程可能是一个守护进程(PPID是1)-在这种情况下,考虑运行:a) $ cat /proc/<PID>/status,以获得关于进程的更深入的信息,如进程所产生的线程数,它的能力等。 B) $ systemctl status <PID>,以便查看导致特定进程创建的systemd单元。如果该服务不是紧急的—您可以停止和禁用该服务。

4)重启Docker服务 执行命令sudo service docker restart。

5)你到了这一步,然后… 只有在不会将您的系统置于危险之中时,才考虑重新启动服务器。

你可以用下面的命令杀死监听该端口的进程:

kill -9 $(lsof -t -i tcp:<port#>)

ex :

(lsof -t -i tcp:<port#>)

或者ubuntu:

Sudo lsof -t -i:8000 '

lsof的手册页:https://man7.org/linux/man-pages/man8/lsof.8.html

-9是硬杀,不检查任何deps。


(不相关,但可能有用,如果它的PORT 5000神秘)-罪魁祸首进程是由于Mac OS monterery。

端口5000通常用于为本地开发服务器提供服务。当更新到最新的macOS操作系统时,我无法将docker绑定到端口5000,因为它已经在使用中。(您可能会发现一条类似Port 5000已被使用的消息。)

通过运行lsof -i:5000,我发现使用端口的进程名为ControlCenter,这是一个原生macOS应用程序。如果这种情况发生在您身上,即使您使用暴力(并杀死)应用程序,它也会重新启动。在我的笔记本电脑中,lsof -i:5000返回控制中心正在被id为433的进程使用。我可以杀死所有-p 433,但macOS不断重新启动进程。

在这个端口上运行的进程原来是一个AirPlay服务器。你可以在

系统首选项›共享,取消检查AirPlay接收器以释放端口5000。

我遇到了这个问题。我的简单解决方案是从系统中删除mongodb

Ubuntu中删除mongodb的命令:

sudo apt-get purge mongodb mongodb-clients mongodb-server mongodb-dev

sudo apt-get purge mongodb-10gen 

sudo apt-get autoremove

我通过重新启动Docker来解决这个问题。

也许这太粗鲁了,但对我来说很管用。重新启动docker服务本身

sudo service docker restart

希望它也适用于你!