如何从AWS SAM本地Docker容器访问另一个Docker容器运行节点快递服务器?

问题描述

我们正在使用SAM Local在本地进行开发,以在API网关中调用Lambda。 SAM Local使用Docker容器(设置应尽可能接近Lambda节点运行时)来执行此操作。我们希望该Lambda以运行在另一个容器中的某些Node Express服务器的形式访问API Mocking服务中的一些数据(如果需要,也可以在本地运行)。这两个容器都位于用户创建的Docker桥接网络中,该网络如下创建:

docker network create sam-demo

API模拟服务已运行并添加到网桥网络:

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

Lambda在调试模式下被调用添加到网桥网络:

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

检查网桥网络会同时显示SAM本地lambda(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","MacAddress": "02:42:ac:14:00:02","IPv4Address": "172.20.0.2/16","IPv6Address": ""
            }
        },"Labels": {}
    }

现在,Lambda打假游戏的网址应该是什么?根据{{​​3}},它应该是模拟容器的IPv4Address,即Docker docs,但我不确定要使用哪个端口或如何找到端口?

我可以执行模拟并成功ping通SAM Local容器,但是由于外壳没有ping,curl,nc或其他任何东西,我无法从SAM Local容器执行相同的操作。

我无法直接从我的机器上访问Mock容器,因为它是Mac,我相信这样做存在问题。

任何建议或后续步骤都将不胜感激。

非常感谢,

山姆

解决方法

更新


最后我放弃了这种方法,因为我不知道Lambda的URL应该是什么来打Docker Bridge网络中的模拟。

另一种方法是使用此URL实际上直接从Lambda中命中了模拟Docker容器(模拟容器暴露了端口3002):-

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

希望这可以帮助某人。...请让我知道是否有人解决了我最初发布的桥网问题。

谢谢

山姆