Я использую Docker на ноутбуке с Windows 10. Недавно я попытался заставить некоторый код работать в контейнере для подключения к другому серверу в сети. В итоге я создал контейнер Ubuntu и обнаружил, что проблема заключается в конфликте IP между docker сетью и ресурсом сервера (172.17.1.3).
Похоже, на * 1024 существует дополнительный уровень сети Настройка * Docker в системе Unix отсутствует, а комментарии docker о «простом использовании мостовой сети» не решают эту проблему.
docker network inspect bridge
[
{
"Name": "bridge",
"Id": "d60dd1169153e8299a7039e798d9c313f860e33af1b604d05566da0396e5db19",
"Created": "2020-02-28T15:24:32.531675705Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
Можно ли изменить подсеть / шлюз, чтобы избежать конфликта IP? Если так, то как? Я попробовал эту простую вещь и создал новую docker сеть:
docker network create --driver=bridge --subnet=172.15.0.0/28 --gateway=172.15.0.1 new_subnet_1
Кажется, что где-то все еще есть конфликт, в 172.17.0.0/16 другие устройства просто ничего не достигают. Я предполагаю, что это где-то в HyperV, адаптере vEthe rnet или vswitch.
UPDATE 1 Я взглянул на wireshark (уровень P C) с сетью new_subnet_1 и Я не видел, чтобы эти пакеты покидали интерфейс vSwitch или NI C P C. Я видел этот Docker форум , который указывает на проблему с Hyper-V и V-switch, которая может быть проблемой.
Docker Engine v19.03.5 DockerDesktopVM, созданный Docker для Windows установка
ОБНОВЛЕНИЕ 2 После нескольких изменений Hyper-v и восстановления среды я проверяю DockerDesktopVm. После получения доступа из привилегированного контейнера я обнаружил, что в сети docker0 был конфликт IP. Docker0 - это та же самая мостовая сеть по умолчанию, которую я избегал, потому что это предопределенная сеть, которую нельзя удалить, и весь мой трафик c отправляется в нее.