在某些情况下,至关重要的是在停止容器或终止进程之前对问题进行更深入的调试。
考虑遵循以下清单:
1)检查您当前的docker compose环境
Run 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
is 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
)和执行命令。
您还可以运行:$ pstree -s <PID>
以可视化方式显示该流程及其相关流程。
在我们的例子中,我们可以看到该进程可能是一个守护进程(PPID为1)-在这种情况下,请考虑运行:
A)$ cat /proc/<PID>/status
为了获得有关该进程的更深入的信息,例如该进程产生的线程数,它的功能等”。
B)$ systemctl status <PID>
为了看到系统的导致创建特定流程的部门。如果服务不是关键性服务,则可以停止并禁用该服务。
4)重新启动码头工人服务
运行:sudo service docker restart
。
5)您到了这一点,并且..
仅在不给系统带来风险的情况下,请考虑重新启动服务器。
sudo netstat -pna | grep 3000
以获取正在监听的过程。