docker - Docker 容器端口 6002 连接被拒绝
问题描述
操作系统:适用于 Windows 的 Docker。操作系统类型:linux。架构:x86_64
我有一个在 Docker 容器内运行的 ASP.NET 核心 Web 应用程序。下面是我的 Dockerfile。
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 6002
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["AdvPersonApi.csproj", "AdvPersonApi/"]
RUN dotnet restore "AdvPersonApi/AdvPersonApi.csproj"
COPY . ./AdvPersonApi/
WORKDIR "/src/AdvPersonApi"
RUN dotnet build "AdvPersonApi.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "AdvPersonApi.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
EXPOSE 6002
ENTRYPOINT ["dotnet", "AdvPersonApi.dll"]
应用程序构建成功。我还能够创建 Docker 映像并运行它。我希望可以在 localhost:6002 访问该应用程序。我使用以下命令创建容器:
docker run -p 6002:6002 --name advpersonapicontainerv2 advpersonapi:v2
我看到容器已创建并正在运行。
下面是 docker ps 的结果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0484b184aeb8 advpersonapi:v2 "dotnet AdvPersonApi…" About a minute ago Up About a minute 0.0.0.0:6002->6002/tcp advpersonapicontainerv2
问题是我无法在 Container 端口 6002 访问应用程序。以下命令会拒绝连接:
docker exec 0484b184aeb8 curl http://localhost:6002/api/person/time
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (7) Failed to connect to localhost port 6002: Connection refused
但是,如果我尝试
docker exec 0484b184aeb8 curl http:// localhost:80 /api/person/time
,我得到了回应。我是 Docker 新手。我应该怎么做才能将主机端口6002正确映射到容器端口6002?
解决方案
我弄清楚发生了什么事。我不得不通过将以下内容添加到 appsettings.json 来强制 Kestrel 监听端口 6002。
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://+:6002"
}
}
}
感谢@Timothy John Laird 在上述评论中提供的提示
推荐阅读
- node.js - 非虚拟机使用
实际上并未更改节点版本 - html - 如何阻止 div 元素受到文本换行符的影响?
- intellij-idea - Goland 无法同步 go mod 依赖项
- python - 如何在 python 中使用嵌套字典选择特定键?
- html - 使用css自定义顶部边框宽度
- javascript - 使用 Fetch 时,页面会重新加载(不应该)并且只显示 Json 数据而不是应该显示的页面
- node.js - 用户刷新网站后用户未授权
- python - 3 个变量的二维图
- amazon-web-services - Terraform 邮件格式的政策文件
- reactjs - 状态值在反应 js 中未定义