Docker 教程全部绑定到端口 80,并且在本地和远程服务器上失败,因为端口 80 已在使用中

lak*_*ood 6 port containers port80 docker docker-compose

我试图理解所有这些 Docker 教程,但实际上没有解释端口 80 的含义。只是,“绑定到端口 80”。

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

启动用户层代理时出错:监听 tcp 0.0.0.0:80:绑定:地址已在使用中

因此,我知道端口 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
Run Code Online (Sandbox Code Playgroud)

将此更改为不会引发错误,但这意味着我们只能解决http://example.com:90-

ports:
  - "90:80"
Run Code Online (Sandbox Code Playgroud)

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

Zac*_*ger 6

你还有其他东西在端口 80 上运行吗?您可以尝试curl localhost:80lsof -i :80;你可能有 Apache 或其他默认运行的东西,你需要杀死它们。

  • 不,不一定。如果您想保持 Nginx 运行,我会将您的容器暴露在不同的端口上,然后使用 Nginx 在适当的主机名上路由到它。正如在您的示例中一样,如果您有 `ports: - "8080:80"` 或其他内容,您可以有一个类似 ``` server { Listen 80; 的块;服务器名称something.com;位置/{ proxy_pass http://127.0.0.1:8080; } } ``` (请原谅格式,注释中没有多行) (3认同)