当我在Docker项目中运行docker-compose up
时,它会出现以下消息:
Error starting userland proxy: listen tcp 0.0.0.0:3000: bind: address already in use
netstat -pna | grep 3000
显示了这个:
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN -
我已经尝试了docker-compose down
,但它没有帮助。
答案 0 :(得分:24)
在您的情况下,正是使用该端口的其他进程正如评论中所示,sudo netstat -pna | grep 3000
帮助您解决问题。
在其他情况下(我自己多次遇到它),它主要是在其他一些实例上运行的同一个容器。在这种情况下docker ps
非常有用,因为我经常在其他目录中运行相同的容器,然后尝试在其他地方再次运行,其中使用了相同的容器名称。
docker ps
如何帮助我: docker rm -f $(docker ps -aq)
是一个简短的命令,用于删除所有容器。
修改:添加了docker ps
帮助我的方式。
答案 1 :(得分:5)
在某些情况下,必须在停止容器或终止进程之前对问题进行更深入的调试。
请考虑以下清单:
1)检查您当前的docker撰写环境
运行docker-compose ps
。
如果另一个容器正在使用该端口,则用docker-compose stop <service-name-in-compose-file>
停止它,或者通过用stop
替换rm
来删除它。
2)检查在当前工作空间之外运行的容器
运行docker ps
以查看主机下运行的所有容器的列表。
如果发现另一个容器正在使用该端口,则可以使用docker stop <container-id>
停止该端口。
(*)因为您不在原始compose
环境的范围内-因此,最好使用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
并查看父进程(PPID
)的ID和执行命令。
您还可以运行:$ pstree -s <PID>
以可视化方式显示该流程及其相关流程。
在我们的例子中,我们可以看到该进程可能是守护进程(PPID为1)-在这种情况下,请考虑运行:
A)$ cat /proc/<PID>/status
,以便获得有关以下内容的更深入的信息进程,例如进程产生的线程数,其功能等。
B)$ systemctl status <PID>
,以便查看引起特定进程创建的systemd单元。如果服务不是很关键-您可以stop and disable the service。
4)重新启动Docker服务
运行:sudo service docker restart
。
5)您已经达到了这一点。
仅在不给系统带来风险的情况下,请考虑重新启动服务器。
答案 2 :(得分:3)
我遇到了同样的问题。我通过在主机上停止Apache2服务来解决这个问题。
答案 3 :(得分:2)
当我尝试启动新的伴奏时,出现以下错误- 监听tcp 0.0.0.0:8080:绑定:地址已在使用中。
解决方案:netstat -tulnp | grep 8080
[root@ip-112-x6x-2x-xxx.xxxxx.compute.internal(aws_main)〜]#netstat -tulnp | grep 8080 tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 12749 / java [root@ip-112-x6x-2x-xxx.xxxxx.compute.internal(aws_main)〜]#
杀死-9 12749
然后尝试重新启动应该工作的容器
答案 4 :(得分:1)
答案 5 :(得分:1)
这很可能是因为您已经在主机操作系统上运行了 Web 服务器,因此它与 Docker 尝试启动的 Web 服务器冲突。
所以在尝试其他任何东西之前先试试这个单线:
sudo service apache2 stop; sudo service nginx stop; sudo nginx -s stop;
答案 6 :(得分:1)
在我的情况下是
启动userland代理时出错:监听tcp 0.0.0.0:9000:绑定:地址已在使用中
我所需要做的就是关闭phpstorm
中的侦听侦听功能答案 7 :(得分:1)
我遇到了同样的问题,
docker-compose down --rmi all
(在运行docker-compose up的同一目录中)
帮助
答案 8 :(得分:1)
这对我有帮助:
docker-compose down
docker rm -fv $(docker ps -aq)
sudo lsof -i -P -n | grep <port number>
,然后:
kill -9 <process id>
(macOS)或sudo kill <process id>
(Linux)。
答案 9 :(得分:1)
今天下午,我升级了docker并遇到了同样的问题。我尝试重新启动Docker,但没有运气。
最后,我必须重新启动计算机,然后计算机才能正常工作。绝对是一个错误。
答案 10 :(得分:0)
使用端口8888的是Jupiter,我不得不更改Jupiter Notebook的配置文件才能在另一个端口上运行。
列出使用该特定端口的人员。 须藤lsof -i -P -n | grep 9
您可以在〜/ .jupyter / jupyter_notebook_config.py中指定要让Jupyter运行的端口取消注释/编辑以下行:
如果您没有jupyter_notebook_config.py,请尝试运行jupyter notebook --generate-config。有关Jupyter配置的更多详细信息,请参见此内容。
答案 11 :(得分:0)
我已经使用另一个端口运行容器,例如... 8082 :-)
答案 12 :(得分:0)
也许太粗鲁了,但是对我有用。重新启动docker服务本身
sudo service docker restart
希望它也对您有用!
答案 13 :(得分:0)
在我的机器上,此命令netstat -tulpn
中未显示使用中端口(8080)的PID,因此我无法杀死它,杀死容器并重新启动计算机无效。因此,service docker restart
命令为我(ubuntu)重新启动了docker,并且该端口不再使用,我很高兴开始午餐。
答案 14 :(得分:0)
在:docker run -d --name oracle -p 1521:1521 -p 5500:5500 qa / oracle上运行之前 我只是将端口更改为docker run -d --name oracle -p 1522:1522 -p 5500:5500 qa / oracle
对我来说很好!
答案 15 :(得分:0)
更改network_mode:“桥接”到“主机”对我来说是成功的。
与此
version: '2.2'
services:
bind:
image: sameersbn/bind:latest
dns: 127.0.0.1
ports:
- 172.17.42.1:53:53/udp
- 172.17.42.1:10000:10000
volumes:
- "/srv/docker/bind:/data"
environment:
- 'ROOT_PASSWORD=secret'
network_mode: "host"
答案 16 :(得分:0)
如果您有同样的问题并且与Windows兼容,请注意:
就我而言,按照我的方式进行的过程仅仅是grafana-server.exe
。因为我首先下载了二进制版本,然后双击了可执行文件,所以它现在是由用户SYSTEM
作为服务启动的,我无法taskkill
(未经许可)
我必须转到Windows的“服务管理器”并搜索服务“ Grafana”,然后将其停止。之后,端口3000将不再被占用。
希望有帮助。
答案 17 :(得分:0)
我几次遇到相同的问题。重新启动docker似乎可以解决问题
答案 18 :(得分:0)
@DmitrySandalov的答案的一种变化:我的tomcat / java运行在8080上,需要继续进行。查看了docker-compose.yml文件,并将8080的条目更改为我选择的另一个。
nginx:
build: nginx
ports:
#- '8080:80' <-- original entry
- '8880:80'
- '8443:443'
工作完美。 (唯一的麻烦是,如果我更新了项目,更改将被删除,因为它来自外部存储库。)
答案 19 :(得分:0)
选中docker-compose.yml
,可能是两次指定了端口。
version: '3'
services:
registry:
image: mysql:5.7
ports:
- "3306:3306" <--- remove either this line or next
- "127.0.0.1:3306:3306"
答案 20 :(得分:0)
对于Linux / Unix:
使用以下命令简单搜索linux实用程序
netstat -nlp | grep 8888
它将显示正在该端口上运行的处理,然后使用该进程的PID(在行中查找PID)终止该进程。
kill PID
答案 21 :(得分:0)
docker-compose down --rmi all
然后重新启动计算机
答案 22 :(得分:0)
我通过重启Docker解决了这个问题。
答案 23 :(得分:-1)
`$` sudo service redis-server stop
做到了。