docker - NGINX 如何解析 Docker DNS 主机名?
问题描述
我想更好地理解这个过程,但我无法在这里找到解释。
我有一个app
将容器 ID 打印为 http 响应的应用程序/
,类似于 jwilder/whoami 图像。我在 compose 上
使用 nginx 对这个应用程序进行负载平衡。--scale app=2
它使用 Nginx 的默认 Round-Robin 方法在 2 个(或 N 个)应用程序之间正确循环。
Docker 和 Nginx 究竟如何解析和负载均衡 nginx-conf 中的 http://app/ URL?
编辑http://app/
:更具体地说,nginx 如何知道主机名后面有 2 个 IP 地址。
码头工人-compose.yml
version: "3.9"
services:
app:
build:
context: ./Dockerfile
dockerfile: Dockerfile-Application
expose:
- "80"
networks:
- application-net
loadbalancer:
image: nginx:latest
depends_on:
- app
ports:
- "80:80"
volumes:
- ./cfg/nginx.conf:/etc/nginx/nginx.conf:ro
networks:
- application-net
networks:
application-net:
ipam:
driver: default
config:
- subnet: "10.150.1.0/24"
nginx.conf
user nginx;
events {
worker_connections 1000;
}
http {
server {
listen 80;
location / {
proxy_pass http://app:80/;
}
}
}
解决方案
Docker 和 Nginx 究竟如何解析和负载均衡 nginx-conf 中的 http://app/ URL?
Docker 运行您的应用程序用来解析容器名称的 DNS 服务。这就是为什么对于在默认网络以外的网络上启动的容器bridge
,您会看到它resolv.conf
并不指向您的常规 DNS 服务器:
$ docker run --rm --net=net0 alpine cat /etc/resolv.conf | grep nameserver
nameserver 127.0.0.11
推荐阅读
- python - 整数范围作为字典的键
- mysql - 如何将一个表的列修改为其他表的外键AUTO_INCREMENT?
- bash - 如何使用此处的文档阅读当前流程
- python - 使用 Python 中的 ImageGrab 在一次抓取中搜索所有像素和 PNG
- prometheus - Grafana 中的 CPU 指标,用于带有 Actuator Micrometer 和 Prometheus 的 Spring Webflux 应用程序
- android - 在 Android 项目中添加 Hilt 组件后构建失败
- c++ - gcc 和 clang 之间的 typedef-ed ref-qualified 函数类型的行为不同
- python - Python pyudev 和串行库可以返回符号链接设备吗?
- html - 标签在 HTML 文档中的作用是什么?
- javascript - 如何在自定义函数中捕获承诺错误?