簡體   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