我在Azure Tips&技巧#311,它还可以。我还咨询了Vinnie James,这是类似的
逻辑应用程序在收到HTTP请求时运行,该请求在VS代码中是localhost,可以很容易地从浏览器中使用
但当我进入下一步,构建一个映像并在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响应;看起来应用程序未启动。。。
首先,关于评论中的答案:请将Dockerfile
和run命令的内容添加到问题中,否则很难阅读。
考虑到您有以下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
正如您所看到的,我必须访问localhost中的端口51883
才能访问容器中的端口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
现在我可以访问引用localhost
上的端口5000
的容器的端口5000
。