- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我制作了一个 ASP.NET Core Web API,它可以 ping 一个 Mongodb 和一个 docker 容器。 Web api 调用在不使用 docker 时工作,但在我使用它时返回 Not Found 错误。我认为这与我正在运行的端口有关,但我不确定因为这是我第一次使用 docker。
在命令提示符下,我这样做:docker build -t projectname .
然后我运行图像docker run -p 8080:80 projectname
运行后,如果我调用 http://localhost:8080/api/classname,我会收到 Not Found 错误消息“这是我的无效消息”,所以看起来我的 docker 容器正在运行。当我调用 http://localhost:8080/api/classname?id=1(这是一个有效的 id)时,我仍然收到 Not Found 错误,但没有收到“这是我的无效消息”文本.
类名 Controller API 获取:
[Route("api/[controller]")]
[ApiController]
public class ClassNameController : Controller
{
[HttpGet]
public IActionResult GetDescendents(int id)
{
var mongoDbService = new MongoDbService();
try
{
var node = mongoDbService.GetTreeNodeById(id);
if (node == null)
{
return NotFound("this is my invalid message");
}
else
{
//stuff happens
}
}
catch (Exception e)
{
return BadRequest(e);
}
return Ok();
}
Dockerfile:
See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["ProjectName/ProjectName.csproj", "ProjectName/"]
RUN dotnet restore "ProjectName/ProjectName.csproj"
COPY . .
WORKDIR "/src/ProjectName"
RUN dotnet build "ProjectName.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ProjectName.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ProjectName.dll"]
启动设置.json:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:8080",
"sslPort": 8080
}
},
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"DockerAPI": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/",
"publishAllPorts": true,
"useSSL": true
}
}
}
最佳答案
考虑到您尚未定义它,当您在 docker 容器中使用 Web API 和 mongo 服务时,它可能位于不同的网络上。
解决此问题的一种快速方法是更改 localhost
来自你的 mongo 连接字符串,来自你的 IP 号码,在你的 appsettings
中, 像这样:
"ConnectionString":"mongodb://192.168.0.27:27017"
请注意,在您的 Dockerfile 中您没有定义环境,在这种情况下,您在 docker 中的应用程序将使用生产
appsettings
而不是你的
appsettings.Development
.
"ConnectionString":"mongodb://mongo"
示例
docker-compose.yml
:
version: "3.7"
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
networks:
- mynetwork
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
networks:
- mynetwork
webapi:
container_name: webapi
build:
context: .
dockerfile: ./YourProject/Dockerfile
ports:
- 8080:80
depends_on:
- mongo
links:
- mongo
networks:
- mynetwork
networks:
mynetwork:
driver: bridge
进而:
docker-compose up
关于c# - API 不起作用,使用 Docker 和 ASP.NET CORE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62561312/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!