我想让一个Laravel应用程序在Docker中运行,但在第一个障碍时失败了,我试图通过以下命令使用docker/快速入门Docker映像,但遇到了下面的阻塞。
$docker run -p 80:80 docker/getting-started
docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:80: bind: address already in use.
下面列出了正在运行的内容:
$sudo lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 143 root 6u IPv4 0x17106caf335097c7 0t0 TCP localhost:http (LISTEN)
nginx 10145 Jeremyrrsmith 6u IPv4 0x17106caf335097c7 0t0 TCP localhost:http (LISTEN)
nginx 10218 Jeremyrrsmith 6u IPv4 0x17106caf335097c7 0t0 TCP localhost:http (LISTEN)
nginx 10296 Jeremyrrsmith 6u IPv4 0x17106caf335097c7 0t0 TCP localhost:http (LISTEN)
nginx 10372 Jeremyrrsmith 6u IPv4 0x17106caf335097c7 0t0 TCP localhost:http (LISTEN)
据我所知,我需要杀死在端口80上运行的任何东西,所以我已经杀死了它们(143个错误除外),但它们使用新的PID重新启动。我真的应该杀了这些人吗?Docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:80: bind: address already in use.
错误让我头疼。netstat -ltnp | grep 80
是根据其他线程运行的常见命令,但我得到的响应是netstat: option requires an argument -- p
。我已经读过了,第一个是一个Linux命令(在其他线程中我不清楚)。我用的是Mac电脑。lsof -n -i4TCP:80 | grep LISTEN
是Mac上的命令(希望它能帮助其他人)。这提供了
nginx 10145 Jeremyrrsmith 6u IPv4 0x17106caf335097c7 0t0 TCP 127.0.0.1:http (LISTEN)
nginx 10218 Jeremyrrsmith 6u IPv4 0x17106caf335097c7 0t0 TCP 127.0.0.1:http (LISTEN)
nginx 10296 Jeremyrrsmith 6u IPv4 0x17106caf335097c7 0t0 TCP 127.0.0.1:http (LISTEN)
nginx 10372 Jeremyrrsmith 6u IPv4 0x17106caf335097c7 0t0 TCP 127.0.0.1:http (LISTEN)
我关闭了这些PID,它们只是用一个新的PID重新启动,我不认为我需要它们,但它们与系统相关吗?我如何永远杀死他们,他们实际上是在阻止我将端口80用于Docker吗?
4条答案
按热度按时间rbl8hiat1#
绕过已用端口的最简单、最常见的方法是使用不同的端口Map,例如
docker run -p 8080:80 docker/getting-started
并通过localhost:8080
访问如果您想使用端口
80
,您可能必须停止nginx
服务,而不是终止该进程。chy5wohz2#
我想是拉瓦尔贴身男仆。我刚刚拿到了我认为已经解决的问题。As lsof-n-i4tcp:80|grep Listen现在不返回任何内容,并且运行docker命令已经设置了一个容器。因此端口80被nginx阻塞,该端口是由laravel valet添加的,要使用端口80,您需要停止valet,并在不再需要该端口时重新启动它。我认为。
wn9m85ua3#
正如您自己所说,您的设备上正在运行nginx,该设备阻塞了端口80。
Ngix是你自己安装的吗?它是作为一项系统服务安装的,在您打开设备电源时会自动启动吗?
如果它作为系统服务运行,您可能需要使用适当的系统命令逐步关闭它,而不是尝试终止进程。我不知道Mac上的命令是什么,但如果你搜索它,你会发现的。
在Linux上,这可能是
systemctl stop nginx
,具体取决于您的系统。你知道nginx进程来自哪里吗?
anhgbhbe4#
Docker nginx端口问题:默认情况下,ubuntu安装运行在80端口的apache。这也可能发生在nginx上。因此,请遵循相同的流程。
Docker-Compose.yml文件