【问题标题】:Docker tutorials all bind to port 80, and fail on local and remote servers as port 80 is already in useDocker 教程都绑定到 80 端口,并且在本地和远程服务器上失败,因为端口 80 已经在使用中
【发布时间】:2020-01-26 00:02:20
【问题描述】:

我试图围绕所有这些 Docker 教程展开思考,但实际上没有任何关于 80 端口是什么的解释。只是,“绑定到端口 80”。

这是我在运行示例 Dockerfile 后遇到同样错误的第三个 Docker 教程:

启动用户态代理时出错:listen tcp 0.0.0.0:80: bind: address 已经在使用中

所以,我知道端口 80 基本上是默认端口,这将允许我的应用程序在 example.com 而不是 example.com:80 上运行 - 例如。我的网络服务器和本地机器抱怨这个端口正在使用中。当然可以,默认是在使用的。

那么,为什么所有这些 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. 1024以下的端口有特权,只能被root使用 2. 80端口正在使用中。无论哪种情况,都尝试将其映射为8080:80
  • @Stavr00,谢谢。你能确认这个绑定吗?我们在这里是说将端口 8080 绑定到端口 80,还是反之亦然?当我进行更改时,我只能使用http://ipaddress:8080 访问网址。从概念上讲,如果我正在运行一个安装了 nginx 的实时 Web 服务器,并且正在以“旧方式”主动提供页面 - 一个 VM/app/nginx 配置......这是发生了什么吗?从根本上说,这种路由是否只能在默认端口 80 上没有运行 Web 服务器的机器上工作?比如,你会建议第二台没有运行 nginx 应用的服务器吗?

标签: docker docker-compose containers port port80


【解决方案1】:

你在 80 端口上运行了其他东西吗?你可以试试curl localhost:80lsof -i :80;默认情况下,您可能会运行 Apache 或其他需要杀死的东西。

【讨论】:

  • lsof -i :80 的输出中有许多 nginx 行,以及使用curl 命令的“来自服务器的空回复”。这基本上是我对容器化的不理解。我基本上需要一个干净的、全新的、没有运行 Web 应用程序的服务器来开始使用 Docker 容器吗? Docker 不适合在 nginx 上托管非容器化 Web 应用程序的 VM 上吗?
  • 不,不一定。如果您想保持 Nginx 运行,我会将您的容器暴露在不同的端口上,然后使用 Nginx 在适当的主机名上路由到它。在你的例子中,如果你有ports: - "8080:80" 或其他东西,你可以有一个像``` server { listen 80; 这样的块。 server_name something.com;位置 / { proxy_pass 127.0.0.1:8080; } } ```(请原谅格式化,cmets 中没有多行)
【解决方案2】:

example.com 和 example.com:80 顺便说一句。在这里,您主机中的某些应用程序已经在侦听端口 80,它与容器无关。可能,您也在主机中运行 nginx 服务器。你是 ?

【讨论】:

  • 是的。这就是正在发生的事情。上面关于配置服务器块的答案是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 2019-04-25
相关资源
最近更新 更多