解决 Docker-Compose 设置中的 HAProxy 访问问题

问题描述 投票:0回答:1

我是 Docker 新手,一直在尝试让简单的 docker-compose 设置工作但是,我面临一个问题:
虽然我可以直接访问公开端口 82 上的 Web 应用程序,但我似乎无法通过公开端口 81 上的 HAProxy 访问它。我目前使用的是 Docker 版本 25.0.3。
谁能帮我弄清楚我的配置中可能缺少什么?

version: '3'
services:
  webapp:
    image: httpd
    ports:
     - 82:80

   lb:
     image: 'dockercloud/haproxy:latest'
     volumes:
        - /var/run/docker.sock:/var/run/docker.sock
     links:
       - webapp
     ports:
      - 81:80
docker docker-compose haproxy
1个回答
0
投票

您的设置如下所示:

       Internet
           |
          [81]
       HAProxy
           |
          [80]
        Web App
           |
          [82]
  • 请求来自端口 81 (HAProxy),然后该请求应将它们转发到在其容器内侦听端口 80 的 Web 应用程序。
  • Web 应用程序容器将内部端口 80 映射到外部端口 82。

尝试使用以下

docker-compose.yml
文件在
webapp
lb
服务之间建立正确的网络和通信:

version: '3'
services:
  webapp:
    image: httpd
    ports:
      - 82:80
    networks:
      - webnet

  lb:
    image: 'dockercloud/haproxy:latest'
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 81:80
    depends_on:
      - webapp
    networks:
      - webnet

networks:
  webnet:

正如建议的,

links:
选项已过时,对于现代 Docker 网络来说不是必需的。同一网络中的容器可以通过服务名称来发现彼此并进行通信。

这定义了一个自定义网络

webnet
并向其分配了两项服务。这确保他们可以使用服务名称作为主机名进行通信。
确保
dockercloud/haproxy
容器中的 HAProxy 配置正确设置,以将流量路由到
webapp
服务。 HAProxy 需要知道正确的服务名称和端口才能正确转发请求。

并检查 HAProxy 是否配置为侦听

0.0.0.0:80
*:80
,以确保它接受来自所有 IP 地址的连接,至少用于测试。

© www.soinside.com 2019 - 2024. All rights reserved.