Docker MACVLAN работает только Outbound
Я пытаюсь настроить MACVLAN для своих контейнеров докеров. У меня есть новая установка Raspbian и Docker, и я выполнил шаги, описанные в документации Docker, чтобы создать MACVLAN: https://docs.docker.com/network/network-tutorial-macvlan.
Сеть выглядит следующим образом:
[
{
"Name": "pub_net",
"Id": "782c49f79f549b11f04a6df98b8b2cbf52deef072e036306231309e44a1c9f3a",
"Created": "2020-02-25T14:44:12.105402396+01:00",
"Scope": "local",
"Driver": "macvlan",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.178.0/24",
"Gateway": "192.168.178.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"682a47a60a5478d19b8c6fc923e11c949f70c5c07fe4dc8d94a772524c2820a1": {
"Name": "IoBroker",
"EndpointID": "5e7068dd9330792a91e1f1f023bd052d91d1fa93f50a2eb670ef8be81b61587f",
"MacAddress": "02:42:c0:a8:b2:02",
"IPv4Address": "192.168.178.2/24",
"IPv6Address": ""
}
},
"Options": {
"parent": "eth0"
},
"Labels": {}
}
Скажем, у меня есть контейнер Alpine, подключенный к этой сети. Изнутри контейнера я могу получить доступ к Интернету и всему в моей сети. Однако я не могу получить доступ к любому контейнеру внутри MACVLAN извне. Я знаю, что обычно это не работает с хоста, но я пытаюсь получить доступ к контейнеру не с хоста, а с другой машины в моей сети. IP-адрес контейнера недоступен извне.
Если я выполню шаги, чтобы разрешить хосту доступ к контейнерам в MACVLAN (создать еще один MACVLAN и добавить запись в таблицу маршрутизации), я смогу получить доступ к контейнерам с хоста, но все же не извне.
Может быть, это скорее проблема с сетью Linux, чем с Docker?
Версия Docker: 19.03.6 ОС: Raspbian Buster 10, версия ядра 4.19.97-v7+
Были бы признательны за идеи.
4 ответа
Похоже, это проблема ARP в версии ядра Linux, используемой в Raspbian. После обновления ядра с помощью sudo rpi-update у меня теперь работает.
На самом деле у меня такая же проблема с пятницы на прошлой неделе.
Если я пингую хост, пытающийся получить доступ к контейнеру докера, изнутри контейнера (ваш альпийский контейнер), я могу получить доступ к контейнеру извне, пока я не перезапущу сам контейнер.
Я знаю, что это не решение, но, возможно, поможет определить проблему.
Лучшая авиация
У меня есть небольшой способ решения вашей проблемы, потому что у меня такие же проблемы.
Я выполнил чистую установку omv 5 после того, как
sudo rpi-update 20354bebcc2a8448128f2348e19e155910d25122
строка (хэш) после команды "rpi-update" - это последнее ядро 4.19.118, которое исправляет проблемы ARP.
Я буду ждать обновления до 5.X Kernal после того, как будут решены проблемы с установкой докеров.
У меня точно такая же проблема. Я пробовал обновить с помощью rpi-update до ядра 5.4, но потом не могу установить докер (он перестал работать после rpi-update). Как вы установили докер? Я попробовал чистую установку Raspbian с последующим rpi-update, а затем попытался установить докер, но все равно не повезло.
Setting up docker-ce (5:19.03.9~3-0~raspbian-buster) ...
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.
invoke-rc.d: initscript docker, action "start" failed.
docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Tue 2020-05-19 21:42:58 BST; 21ms ago
Docs: https://docs.docker.com
Process: 2740 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
Main PID: 2740 (code=exited, status=1/FAILURE)
dpkg: error processing package docker-ce (--configure):
installed docker-ce package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
docker-ce
E: Sub-process /usr/bin/dpkg returned an error code (1)