首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >API在本地响应(vs 2019),但在本地码头容器中没有响应。

API在本地响应(vs 2019),但在本地码头容器中没有响应。
EN

Stack Overflow用户
提问于 2021-10-03 13:16:07
回答 2查看 221关注 0票数 0

我是新来的码头,并通过文件和Pluralsight视频。我有一个非常简单的API,我正在练习/学习如何作为一个码头容器运行。所有的东西都会建立和运行,但是它不会响应邮递员的请求。

然而,当我在VS 2019年运行该项目时,它会响应邮递员。

Docker桌面4.X Linux容器VS 2019

API:

代码语言:javascript
复制
[HttpGet("basic")]
[AllowAnonymous]
public IActionResult Basic()
{
   return Ok("Alive");
}

邮差:

获取http://localhost:5150/HealthCheck/basic

码头工人组成:

代码语言:javascript
复制
version: "3"

services:
  api:
    #snipped container name etc for brevity
    ports:
        - "5150:5150"
    networks:
        - backend                    
networks:
  backend:

Dockerfile:

代码语言:javascript
复制
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 5150
#snipped brevity
ENTRYPOINT ["dotnet", "TestingDocker.API.dll"]

启动设置

代码语言:javascript
复制
{
  "iisSettings": {
  "windowsAuthentication": false,
  "anonymousAuthentication": true,
  "iisExpress": {
    "applicationUrl": "http://localhost:5150/",
    "sslPort": 0
  }
},

组成输出:

代码语言:javascript
复制
[12:49:29 INF] Now listening on: http://[::]:80

我不明白80号港口是从哪里来的。

码头桌面

代码语言:javascript
复制
Running Port:5150

码头工人在图像上的检查

代码语言:javascript
复制
"StdinOnce": false,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "ASPNETCORE_URLS=http://+:80",
            "DOTNET_RUNNING_IN_CONTAINER=true",
            "DOTNET_VERSION=5.0.10",
            "ASPNET_VERSION=5.0.10"
        ],

我在疑难解答中读到了一些关于Windows Docker Desktop hyper-v是如何拥有自己的IP地址的,所以我试图找到这个地址,看看它是否会响应,但我所能找到的只是在docker桌面设置中定义的整个子网。192.168.65.0/24

当我看超级v虚拟nic时,他们拥有一个完全不同的子网的ip。172.19.240.1

于是我拿出了一张蒙戈的照片,它确实做出了回应。当我在它上运行检查时,唯一的网络相关的区别,我可以看到它,蒙戈有一个主机名。

因此,我确信这是一些与我的网络设置,但我不知道它。

编辑

根据卡米洛的评论,我补充了我之前尝试过的切入点。

代码语言:javascript
复制
ENTRYPOINT ["dotnet", "DockerTest.API.dll", "--server.urls", "http://0.0.0.0:5150"]

我认为0.0.0.0是一个通配符ip绑定,但这不起作用,所以我建议

代码语言:javascript
复制
ENTRYPOINT ["dotnet", "DockerTest.API.dll", "--urls", "http://+:5150"]

这起作用了!

有一件事要注意。所有这些微小的变化,似乎并没有被挑选出来,因为我们被认为是一个新的形象正在建立在像.03秒。因此,可以肯定的是,我在整个过程中所做的更改都是我使用的

代码语言:javascript
复制
docker-compose build --no-cache

docker-compose up -d --force-recreate
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-03 15:19:26

您有一个环境变量,如:

代码语言:javascript
复制
"ASPNETCORE_URLS=http://+:80"

它是由ASP.NET核心自动创建的,当它没有被赋予任何特定的URL来使用时,这就是这个问题中的情况。

您的困惑可能来自于launch.settings.json文件,该文件似乎正在将应用程序配置为在端口5150上运行,但这是不正确的,原因有两个:

  1. 该文件是用于Visual调试的仅,并且它没有与应用程序一起发布,而且即使使用了该文件,也是在配置iisExpress设置,IIS在Linux.

上不存在。

您有几种解决这个问题的方法:

如@OneCricketeer所述,通过使用5150:80.

  • Specify将ENTRYPOINT

用作ENTRYPOINT的一部分,

  • 为端口添加了一个码头映射

代码语言:javascript
复制
ENTRYPOINT ["dotnet", "DockerTest.API.dll", "--urls", "http://+:5150"]

  • 以及其他程序在构建WebHost.

时直接在程序中指定URL

票数 1
EN

Stack Overflow用户

发布于 2021-10-03 13:37:29

这些日志是容器的内部日志。尚不清楚如何让服务器在5150上运行,但公开不会更改代码行为,并且似乎存在控制服务器绑定的ASPNETCORE_URLS环境变量,而且您没有覆盖该变量。

如果您只想使用localhost:5150,而没有其他更改,则需要使用5150:80作为撰写端口的定义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69425200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档