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)
Другие вопросы по тегам