gpt4 book ai didi

docker - 更改Docker容器中的dotnet核心端口

转载 作者:行者123 更新时间:2023-12-02 19:14:31 24 4
gpt4 key购买 nike

我是Docker的新手,我一直在阅读文档并进行一些实验,但是我没有得到什么。
案例是我有两个应用程序,一个是dotnet core web应用程序,另一个是dotnetcore web Api。我正在容器内运行dotnet核心Web应用程序。以下是docker文件:

WORKDIR /source

COPY . ./DockerTest/
WORKDIR /source/DockerTest

RUN dotnet publish -c release -o /app

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
EXPOSE 50/TCP
EXPOSE 50/UDP
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "DockerTest.dll","--environment=development"]
我执行以运行该镜像的命令是:docker run -d -p 90:50 myapp
现在在这里,我尝试将应在其上运行dotnetcore应用程序的50映射到主机上的端口90。但是不幸的是,我在EXPOSE中输入的端口始终在容器内的端口80上运行,我想知道为什么会这样,以及如何更改它。第二件事是从容器中尝试访问运行在主机上的Web API:
public async Task<string> GetData()
{
var data = "";
var request = new HttpRequestMessage(HttpMethod.Get,
"http://localhost:51468/weatherforecast");


using (var context = ClientFactory.CreateClient()){
var response = await context.GetAsync(request.RequestUri);

if (response.IsSuccessStatusCode)
{
data = await response.Content.ReadAsStringAsync();
}
else
{
data = "error happen";
}
}
return data;
}
这就是我试图将请求发送到容器外部的api的方式,但它给出此错误:HttpRequestException:无法分配请求的地址。
现在,我被封锁了,在这里需要帮助和建议。

最佳答案

首先关于您的Docker:
docker EXPOSE 50仅以docker闻名,dotnet对docker一无所知。因此,在DockerTest.dll中,您还必须指定监听端口。
不要使用端口50,它太低了。低于1024的任何端口都被视为众所周知的端口或系统端口,因此不应使用。 dotnet通常在端口5000上侦听-不是80/443时。
关于您访问​​主机的第二点:
在docker容器中使用localhost时,它将不会到达主机,而只会到达容器本身。所以您必须使用Host LAN ip,即192.168 ..

关于docker - 更改Docker容器中的dotnet核心端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64248485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com