首页 > 解决方案 > 对 Docker 容器中的逻辑应用的 HTTP 调用

问题描述

我已经在 Azure Tips & Tricks # 311中开始使用容器中的逻辑应用程序,它工作正常。我还咨询了Vinnie James,这是类似的

逻辑应用程序在收到 HTTP 请求后运行,该请求 - 在 VS Code 中 - 是本地主机,可从浏览器轻松使用

但是当我进入下一步,构建一个镜像并在 Docker 中运行它时,我完全不清楚如何发出类似的 HTTP 请求;Docker 在同一台 W10 机器上运行,使用 WSL-2

Dockerfile(已更正):

FROM mcr.microsoft.com/azure-functions/dotnet:3.0.14492-appservice
ENV AzureWebJobsStorage=DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX;EndpointSuffix=core.windows.net
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
    AzureFunctionsJobHost__Logging__Console__IsEnabled=true \
    FUNCTIONS_V2_COMPATIBILITY_MODE=true
ENV WEBSITE_HOSTNAME localhost
ENV WEBSITE_SITE_NAME testqueue1
ENV AZURE_FUNCTIONS_ENVIRONMENT Development
COPY . /home/site/wwwroot

尝试 Docker 运行:docker run -p 80:7071 image1

回应是HTTP request sent, awaiting response... No data received

尽管(非常简单)逻辑应用程序在触发后立即发出 200 响应;看起来应用程序没有启动......

标签: dockerhttpcontainersazure-logic-apps

解决方案


首先,关于评论中的答案:请将Dockerfile问题和运行命令的内容添加到问题中,否则它们很难阅读。


考虑到您有以下 Dockerfile:

FROM mcr.microsoft.com/azure-functions/node:3.0

ENV AzureWebJobsStorage DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX;EndpointSuffix=core.windows.net 
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
    AzureFunctionsJobHost__Logging__Console__IsEnabled=true \
    FUNCTIONS_V2_COMPATIBILITY_MODE=true 
ENV WEBSITE_HOSTNAME localhost 
ENV WEBSITE_SITE_NAME test1 
ENV AZURE_FUNCTIONS_ENVIRONMENT Development 

COPY . /home/site/wwwroot 

并且你正在运行它docker run -p 5000 image1

我在这里看到的主要内容是您只指示了containerPort而不指示hostPort,因此您在主机中公开了一个随机端口。

如果这样做docker ps,您将能够看到您正在转发的端口。例如,假设我有我的图像busybox并且我使用docker run -it --rm -p 5000 busybox.

❯ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS                     NAMES
05927642abfc   busybox   "sh"      6 seconds ago   Up 5 seconds   0.0.0.0:51883->5000/tcp   elated_gauss

如您所见,我必须访问51883localhost 中的端口才能访问5000容器中的端口。

另一方面,如果我运行我的容器:docker run -it --rm -p 5000:5000 busybox

❯ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED        STATUS        PORTS                    NAMES
c0aab9646d1a   busybox   "sh"      1 second ago   Up 1 second   0.0.0.0:5000->5000/tcp   busy_roentgen

现在我可以访问5000容器的端口,指的5000localhost.


推荐阅读