Docker教程都绑定到80端口,但在本地和远程服务器上失败,因为80端口已被使用。

6
尝试理解所有这些Docker教程,但实际上并没有解释端口80是什么。只是说“绑定到端口80”。
这是我参加的第三个Docker教程,在运行示例Dockerfile后出现了相同的错误:
“启动用户空间代理时出错:侦听tcp 0.0.0.0:80: 绑定:地址已在使用中”
所以,我明白端口80基本上是默认端口,这将允许我的应用程序在example.com而不是example.com:80上运行。我的Web服务器和本地机器抱怨这个端口正在使用。当然,它正在被默认使用。
那么,为什么所有这些Docker教程都要绑定到端口80?我打赌他们做得对,而我可能漏掉了什么......但是,找不到清晰的解决方案或描述。
这是我正在进行的教程:Digital Ocean的使用Docker安装WordPress:https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-docker-compose 果然,端口80对我来说失败了。
webserver:
  depends_on:
    - wordpress
  image: nginx:1.15.12-alpine
  container_name: webserver
  restart: unless-stopped
  ports:
    - "80:80"
  volumes:
    - wordpress:/var/www/html
    - ./nginx-conf:/etc/nginx/conf.d
    - certbot-etc:/etc/letsencrypt
  networks:
    - app-network

将此更改为不会出现错误,但这意味着我们只能解析http://example.com:90
ports:
  - "90:80"

我在这里缺少什么?为什么所有关于80端口的定义在我的Mac本地和远程Digital Ocean Ubuntu8.1服务器上都失败了?


1
两个潜在的问题:1. 低于1024的端口是特权端口,只能由root使用。2. 端口80正在使用中。无论哪种情况,尝试将其映射为“8080:80”。 - Stavr00
@Stavr00,感谢您的回复。您能确认这个绑定吗?我们是要将端口8080绑定到端口80,还是反过来?当我进行您的更改后,我只能通过http://ipaddress:8080访问URL。从概念上讲,如果我正在运行一个已安装nginx并正在以“旧方式”主动提供页面的实时Web服务器 - 一个VM/app/nginx配置...这就是正在发生的事情吗?基本上,这种路由只能在默认端口80上没有运行Web服务器的计算机上工作吗?也就是说,您是否建议使用第二台没有运行nginx应用程序的服务器? - lakewood
3个回答

6

你的80端口上是否有其他运行中的服务?可以尝试使用curl localhost:80或者lsof -i :80命令查看,你可能已经安装了Apache或其他默认运行在该端口的服务,需要关闭它们。


lsof -i :80 的输出中有许多 nginx 行,并且使用 curl 命令会出现 "Empty reply from the server"。这就是我对容器化的基本疑问。我是否需要一个干净、全新的服务器来开始使用 Docker 容器?在托管非容器化 Web 应用程序的 VM 上使用 Docker 是否不合适? - lakewood
3
不一定。如果您想让Nginx保持运行状态,我建议将容器暴露在不同的端口上,然后使用Nginx将其路由到适当的主机名上。就像您的示例一样,如果您有 ports: - "8080:80" 或类似的内容,您可以添加以下块:server { listen 80; server_name something.com; location / { proxy_pass http://127.0.0.1:8080; } } ```(请原谅格式不正确,注释中没有多行) - Zac Anger

2
如果你像我一样使用的是Mac电脑,那么使用sudo apachectl stop命令可以帮助你解决这个问题。Mac自带了一个Web服务器,并且默认情况下会运行该服务器。可能是由于MacBook Pro上默认启用了Web共享功能。

0

example.com和example.com:80是同一件事情。在这里,您主机中的某些应用程序已经在侦听端口80,这与容器无关。可能您也在主机上运行一个nginx服务器。是吗?


是的,这就是正在发生的事情。关于配置上面的服务器块的答案是正确的。 - lakewood

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