错误:启动用户代理失败:侦听 tcp 0.0.0.0:2049: 绑定失败:地址已被使用。

12
在Ubuntu 18.04上,我正在尝试安装Hyperledger Cello,但在安装过程中,出现了以下错误:
make[2]: Entering directory '/home/julien/cello'
docker-compose -f bootup/docker-compose-files/docker-compose-nfs.yml up -d --no-recreate
WARNING: Found orphan containers (cello-user-dashboard, cello-operator-dashboard, cello-watchdog, cello-keycloak-server, cello-parse-server, cello-dashboard_rabbitmq, cello-mongo, cello-keycloak-mysql, cello-engine) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Starting cello-nfs ... error

ERROR: for cello-nfs  Cannot start service nfs: driver failed programming external connectivity on endpoint cello-nfs (d1be7a4999731983a12df9f1fb6484c7adf669be7edf01c6d962856ed8a6846f): Error starting userland proxy: listen tcp 0.0.0.0:2049: bind: address already in use

ERROR: for nfs  Cannot start service nfs: driver failed programming external connectivity on endpoint cello-nfs (d1be7a4999731983a12df9f1fb6484c7adf669be7edf01c6d962856ed8a6846f): Error starting userland proxy: listen tcp 0.0.0.0:2049: bind: address already in use
ERROR: Encountered errors while bringing up the project.

当尝试找出哪个应用程序正在使用2049端口时,我执行以下操作:

➜  cello git:(master) ✗ sudo netstat -pna | grep 2049
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::2049                 :::*                    LISTEN      -                   
udp        0      0 0.0.0.0:2049            0.0.0.0:*                           -                   
udp6       0      0 :::2049                 :::*                                -                   
unix  3      [ ]         STREAM     CONNECTED     204951   18122/brave --type=  
unix  3      [ ]         STREAM     CONNECTED     204950   5193/brave           

但我没有得到应用程序名称。

我还尝试删除包含 {{

docker rm -f $(docker ps -aq)

就像这篇文章中所说的那样,但它没有起作用。

我应该如何释放此端口?


1
端口2049是NFS服务器端口。您的主机是否正在运行NFS服务器?这将防止其他任何东西绑定在该端口上。您的 netstat 输出未显示端口2049的PID,这表明它是一个内核服务正在使用此端口。 - larsks
不是很清楚,我使用的是Ubuntu 18.04,让我检查一下。 - Juliatzin
1
我解决了这个问题:sudo apt remove nfs-kernel-server!你可以将其作为答案!谢谢! - Juliatzin
发布为答案。很高兴能帮忙! - larsks
2个回答

32

你可以尝试:

docker stop $(docker ps -a -q)
docker ps # again to make sure containers is off
sudo lsof -i tcp:2049 # now you get and list of process running and using 2049 port find and copy PID
sudo kill -9 yout_PID

现在 2049 端口已关闭,重新尝试启动容器...


3
使用命令 "sudo lsof -i tcp:2049" 没有返回任何结果。 - Juliatzin
这组命令帮助我解决了我的问题。 - Venkataramana Madugula

8

看起来您的主机上正在运行NFS服务器。当您以root用户身份运行netstat -p ...时,如果没有看到端口的PID,就会出现以下情况...

tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::2049                 :::*                    LISTEN      -                   
udp        0      0 0.0.0.0:2049            0.0.0.0:*                           -                   
udp6       0      0 :::2049                 :::*                                -                   

如果一个端口被占用,通常意味着有一个内核服务绑定在该端口上。禁用内核NFS服务器(假设您没有使用它)应该可以让您运行容器。


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