Как я могу получить доступ (перенаправить) к общедоступному IP-адресу HTTP-запроса внутри сети docker compose?
Со следующей настройкой:
только контейнер YARP имеет опубликованные порты. Он правильно устанавливаетX-Forward*
заголовки для использования другими контейнерами. Но, к сожалению, это адрес шлюза для создания докеров.
Когда я хочу зарегистрировать IP-адрес (общедоступного) клиента, я получаю::ffff:172.18.0.1
который является IP-адресом шлюза для создания докеров. Каким-то образом мне нужно сказать докеру, чтобы он поместил общедоступный IP-адрес вX-Forward-For
заголовок, который затем будет использоваться моим обратным прокси.
Мои контейнеры работают внутри своей сети:
services:
yarp:
...
networks:
- mynet
Я вижу созданную сеть:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
2bf19f507987 dockercompose1502733..._mynet bridge local
и посмотреть подробности:
$ docker network inspect 2bf
[
{
"Name": "dockercompose1502733..._mynet",
"Id": "2bf...",
"Created": "...",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1" // this is the address I get for public requests
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"b82645911...": {
"Name": "YARP",
"EndpointID": "fb1b...",
"MacAddress": "02:42:ac:...",
"IPv4Address": "172.18.0.10/16",
"IPv6Address": ""
},
...
},
"Options": {},
"Labels": {
"com.docker.compose.network": "mynet",
"com.docker.compose.project": "dockercompose1502733...",
"com.docker.compose.version": "1.29.2"
}
}
]
1 ответ
Вы могли бы сделатьnetwork_mode: host
для службы обратного прокси: https://docs.docker.com/compose/compose-file/#network_mode
Однако будьте внимательны, потому что:
хост: который дает контейнеру необработанный доступ к сетевому интерфейсу хоста
Похоже, это ваше единственное решение: https://github.com/docker/roadmap/issues/157 .
Я предполагаю, что это производственная рабочая нагрузка, вам может быть лучше перейти на kubernetes, где вы, безусловно, столкнетесь с другим набором проблем :), но это не проблема, по крайней мере, с ingress-nginx я смог его настроить.