我是 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
您的设置如下所示:
Internet
|
[81]
HAProxy
|
[80]
Web App
|
[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 地址的连接,至少用于测试。