我是新来的码头,并通过文件和Pluralsight视频。我有一个非常简单的API,我正在练习/学习如何作为一个码头容器运行。所有的东西都会建立和运行,但是它不会响应邮递员的请求。
然而,当我在VS 2019年运行该项目时,它会响应邮递员。
Docker桌面4.X Linux容器VS 2019
API:
[HttpGet("basic")]
[AllowAnonymous]
public IActionResult Basic()
{
return Ok("Alive");
}邮差:
获取http://localhost:5150/HealthCheck/basic
码头工人组成:
version: "3"
services:
api:
#snipped container name etc for brevity
ports:
- "5150:5150"
networks:
- backend
networks:
backend:Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 5150
#snipped brevity
ENTRYPOINT ["dotnet", "TestingDocker.API.dll"]启动设置
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:5150/",
"sslPort": 0
}
},组成输出:
[12:49:29 INF] Now listening on: http://[::]:80我不明白80号港口是从哪里来的。
码头桌面
Running Port:5150码头工人在图像上的检查
"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
于是我拿出了一张蒙戈的照片,它确实做出了回应。当我在它上运行检查时,唯一的网络相关的区别,我可以看到它,蒙戈有一个主机名。
因此,我确信这是一些与我的网络设置,但我不知道它。
编辑
根据卡米洛的评论,我补充了我之前尝试过的切入点。
ENTRYPOINT ["dotnet", "DockerTest.API.dll", "--server.urls", "http://0.0.0.0:5150"]我认为0.0.0.0是一个通配符ip绑定,但这不起作用,所以我建议
ENTRYPOINT ["dotnet", "DockerTest.API.dll", "--urls", "http://+:5150"]这起作用了!
有一件事要注意。所有这些微小的变化,似乎并没有被挑选出来,因为我们被认为是一个新的形象正在建立在像.03秒。因此,可以肯定的是,我在整个过程中所做的更改都是我使用的
docker-compose build --no-cache
docker-compose up -d --force-recreate发布于 2021-10-03 15:19:26
您有一个环境变量,如:
"ASPNETCORE_URLS=http://+:80"它是由ASP.NET核心自动创建的,当它没有被赋予任何特定的URL来使用时,这就是这个问题中的情况。
您的困惑可能来自于launch.settings.json文件,该文件似乎正在将应用程序配置为在端口5150上运行,但这是不正确的,原因有两个:
iisExpress设置,IIS在Linux.上不存在。
您有几种解决这个问题的方法:
如@OneCricketeer所述,通过使用5150:80.
ENTRYPOINT
用作ENTRYPOINT的一部分,
ENTRYPOINT ["dotnet", "DockerTest.API.dll", "--urls", "http://+:5150"]时直接在程序中指定URL
发布于 2021-10-03 13:37:29
这些日志是容器的内部日志。尚不清楚如何让服务器在5150上运行,但公开不会更改代码行为,并且似乎存在控制服务器绑定的ASPNETCORE_URLS环境变量,而且您没有覆盖该变量。
如果您只想使用localhost:5150,而没有其他更改,则需要使用5150:80作为撰写端口的定义。
https://stackoverflow.com/questions/69425200
复制相似问题