繁体   English   中英

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

[英]How do I access another Docker container (running a node express server) from a AWS SAM Local Docker container?

我们正在使用 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",
                "EndpointID": "xxx",
                "MacAddress": "02:42:ac:14:00:02",
                "IPv4Address": "172.20.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }

现在,Lambda 命中模拟的 URL 应该是什么? 根据Docker 文档,它应该是模拟容器的 IPv4Address,即http://172.20.0.2但我不确定哪个端口或如何找到哪个端口?

我可以执行模拟并成功 ping SAM 本地容器,但我不能从 SAM 本地容器执行相同的操作,因为 shell 没有安装 ping、curl、nc 或任何东西。

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

非常感谢任何建议或后续步骤。

非常感谢,

山姆

更新


最后我放弃了这种方法,因为我无法弄清楚 Lambda 的 URL 应该是什么才能在 Docker Bridge 网络中命中模拟。

另一种方法是使用此 URL 直接从 Lambda 访问模拟 Docker 容器(模拟容器暴露端口 3002):-

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

希望这可以帮助某人.... 如果有人解决了我最初发布的桥接网络问题,请告诉我。

谢谢,

山姆

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM