То, что вы утверждаете, является странным поведением, я продемонстрировал тестовый сценарий, чтобы убедиться, что этого не произойдет. Я реализовал сетевой мост точно так же, как вы это сделали, и назначил ему 2 контейнера, один из которых является nginx контейнером, который будет действовать в качестве сервера, а другой - альпийский контейнер, который будет действовать как клиент.
docker network create --driver=bridge --subnet=10.10.2.0/24 dedicated
docker run -it -p 40000:80 --network=dedicated nginx sh
docker run -it -p 49001:30000 --network=dedicated alpine sh
Если бы мы попытались проверить сеть с помощью команды docker network inspect , мы бы убедились, что все в порядке
[
{
"Name": "dedicated",
...
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.10.2.0/24"
}
]
},
...
"Containers": {
"2380d57bb0158792531b3d38dde5cecb3e77e96db7c147c0a0f458a895996767": {
"Name": "amazing_snyder",
"EndpointID": "83b9ed340f855aae2b6aa76e47546713583657af1090a63f9ddfa2d533036f5a",
"MacAddress": "02:42:0a:0a:02:02",
"IPv4Address": "10.10.2.2/24",
"IPv6Address": ""
},
"2506c5bfdac621ff9e88d1594438914ad61acdb38870b7960a34c90412aac13a": {
"Name": "happy_galois",
"EndpointID": "b366f502cf48e39e96815bfd0b7ba29f57bea46ec56ee0651dff64e8197ce5c3",
"MacAddress": "02:42:0a:0a:02:03",
"IPv4Address": "10.10.2.3/24",
"IPv6Address": ""
}
},
...
}
]
Теперь давайте немного поиграем, я буду использовать curl и routetrace, чтобы выяснить, доберемся ли мы до другого сервера, выбрасывающего localhost или нет
Curl Test с использованием localhost
/ # curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused
Если бы мы также попробовали открыть порт, он потерпел бы неудачу
/ # curl localhost:40000
curl: (7) Failed to connect to localhost port 40000: Connection refused
Хотя, если бы мы попробовали ip сервера, он был бы успешным
/ # curl 10.10.2.2:80
<!DOCTYPE html>
....
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
....
Чтобы убедиться, что это это поведение по умолчанию, которое я пытался отследить по маршруту localhost: 80 и 10.10.2.2:80, чтобы убедиться, что localhost не будет проходить через сетевой мост.
/ # traceroute localhost:80
traceroute to localhost:80 (127.0.0.1), 30 hops max, 46 byte packets
1 localhost (127.0.0.1) 0.023 ms 0.019 ms 0.016 ms
Он никогда не выходил из машины, используя IP, он достигал другой машины через сетевой мост.
/ # traceroute 10.10.2.2:80
traceroute to 10.10.2.2:80 (10.10.2.2), 30 hops max, 46 byte packets
1 2380d57bb015.dedicated (10.10.2.2) 0.029 ms 0.023 ms 0.021 ms
Я не знаю, как это сработало для вас, но я предпочитаю проверьте конфигурацию контейнера и проверьте сеть, которая может привести вас к чему-либо.