【发布时间】:2019-10-11 00:36:01
【问题描述】:
我有一个非常简单的 asp.net 核心应用程序(支持 Linux 的 C# Web 应用程序),当我构建 docker 映像并尝试在本地 PC 上运行它时,会发生以下情况; 在我的镜像名为 test 的 docker 中,我键入 docker run test,此时它显示“内容根路径:/app 现在正在侦听:http://[::]:80” 即使当我输入 docker ps 时,我可以看到进程正在运行,但当我尝试导航到 localhost:80 时,我得到的只是漫长的等待,然后“无法访问此站点,localhost 拒绝连接。”
我输入了
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ec158cc3b344
这给了我容器的 IP 地址,但即使直接导航到容器我也得到“无法访问此站点 “如果我在端口 80 上导航,或者如果我尝试直接访问 IP,则“您的连接已中断”。
我还尝试完全跨过 docker 并将映像部署到 Kubernetes 以查看这是否会给我带来好运,但是当我尝试访问服务 External-IP(在本例中为 localhost)时,我得到以下信息 “此页面不工作,本地主机没有发送任何数据。”
我也试过用
kubectl get pods -o wide
并直接访问 Pod 的 IP,但这只会给我“找不到这个 10.1.0.32 页面”,例如。
如果你想知道,这是我的 dockerfile 和 kubernetes 部署 .yml
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["Test/Test.csproj", "Test/"]
RUN dotnet restore "Test/Test.csproj"
COPY . .
WORKDIR "/src/Test"
RUN dotnet build "Test.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "Test.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Test.dll"]
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
spec:
replicas: 3
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
spec:
containers:
- name: test
image: <DockerEndpoint>.io/test:v5 #Sorry, can't include the real endpoint!
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: test
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
app: test
我也明白 .net 核心以奇怪的方式工作,除非你告诉它,否则它不允许它向外界公开其端口,但这与我对 docker/kubernetes 堆栈的相对较新相结合并离开了我不知所措。
有人知道我如何制作一个 .net 核心应用程序,任何应用程序,与 docker 一起工作吗?
附:我真的在使用这样一个简单的应用程序,即使我创建一个具有 docker 支持的全新 .net 核心应用程序,并尝试立即构建和运行基本的 .net 核心应用程序,它也不起作用。我无法让它与任何 .net 核心应用程序一起工作!
【问题讨论】:
-
对于
80,它是容器中的端口,尝试 trundocker ps -ls以找到您的容器并检查端口,例如0.0.0.0:54413->80/tcp, 0.0.0.0:44365->443/tcp。对于此示例,您需要访问 54413 而不是 80。将结果分享给我们docker ps -ls
标签: c# docker asp.net-core kubernetes