Как получить доступ к другому контейнеру Docker (на котором запущен экспресс-сервер node) из локального контейнера Docker AWS SAM?

Мы разрабатываем локально, используя SAM Local для вызова Lambda в API-шлюзе. SAM Local делает это с помощью контейнера Docker (максимально приближенного к среде выполнения узла Lambda). Мы хотим, чтобы эта лямбда имела доступ к некоторым данным в службе имитации API в форме некоторых серверов Node Express, работающих в другом контейнере (при необходимости это также можно было бы запускать локально). Оба контейнера находятся в созданной пользователем сети моста Docker, созданной следующим образом:

docker network create sam-demo

Служба имитации API запускается и добавляется в мостовую сеть:

docker run --network sam-demo --name mock -d -P mock:latest

Лямбда вызывается в режиме отладки и добавляется в мостовую сеть:

sam local start-api -t template.json -d 9229 --docker-network sam-demo

Проверка сети моста показывает, что есть локальная лямбда SAM (wizardly_knuth) и фиктивные элементы:

        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "5ebfa4295a56e4df840676a2e214891543fd4e8cb271ed70ddd67946ab451119": {
                "Name": "wizardly_knuth",
                "EndpointID": "xxx",
                "MacAddress": "02:42:ac:14:00:03",
                "IPv4Address": "172.20.0.3/16",
                "IPv6Address": ""
            },
            "d735c9aa840e4ce7180444cf168cd6b68451c9ca29ba87b7cb23edff11abea7b": {
                "Name": "mock",
                "EndpointID": "xxx",
                "MacAddress": "02:42:ac:14:00:02",
                "IPv4Address": "172.20.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }

Теперь, каким должен быть URL-адрес, по которому лямбда-функция ударит имитацию? Согласно документам Docker, это должен быть IPv4Address фиктивного контейнера, т.е. http://172.20.0.2, но я не уверен, какой порт или как найти какой порт?

Я могу запустить макет и успешно проверить связь с локальным контейнером SAM, НО я не могу сделать то же самое с локальным контейнером SAM, поскольку в оболочке нет установленных команд ping, curl, nc или чего-либо еще.

Я не могу попасть в контейнер Mock прямо со своего компьютера, так как это Mac, и я считаю, что с этим есть проблемы.

Мы очень ценим любые советы или следующие шаги.

Большое спасибо,

Сэм


person SamBrick    schedule 03.09.2020    source источник


Ответы (1)


ОБНОВИТЬ


В конце концов, я отказался от этого подхода, так как не мог понять, каким должен быть URL-адрес лямбда-выражения, чтобы попасть в имитацию в сети Docker Bridge.

Альтернативный подход заключался в том, чтобы просто попасть в фиктивный контейнер Docker непосредственно из Lambda, используя этот URL-адрес (фиктивный контейнер предоставляет порт 3002): -

http://docker.for.mac.localhost:3002/

Надеюсь, это может кому-нибудь помочь ... дайте мне знать, если кто-нибудь решит проблему с мостовой сетью, о которой я изначально писал.

Спасибо,

Сэм

person SamBrick    schedule 10.09.2020
comment
вы могли бы использовать --docker-network host, но это плохо, когда вы пытаетесь запустить несколько лямбда-выражений параллельно - person Madeo; 19.11.2020