У меня очень простое базовое приложение asp.net (веб-приложение C # с поддержкой Docker для Linux), и когда я собираю образ докера и пытаюсь запустить его на своем локальном ПК, происходит следующее;В докере с моим изображением, называемым test, я набираю команду docker run test, в которой говорится: «Путь к корневому каталогу контента: / app Сейчас прослушивается: http://[::]:80" И даже если я набираю docker ps, я вижу, как выполняется процесс, когда я пытаюсь перейти к localhost: 80 все, что я получаю, это долгое ожидание, а затем "Этот сайт не может быть достигнут, localhost отказался подключиться."
Я набрал
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ec158cc3b344
, который дал мне IP-адрес контейнера, но даже при переходе непосредственно к контейнеру я либо получаю «Этот сайт не доступен», если я перехожу на порт 80, либо «Ваше соединение было прервано», если япопробуйте получить доступ к IP-адресу напрямую.
Я также попытался полностью перешагнуть через докер и развернуть образ в Kubernetes, чтобы посмотреть, даст ли это мне какую-то удачу, но вместо этого, когда я пытаюсь получить доступ к сервисам External-IP (В этом случае localhost), я получаю следующее «Эта страница не работает, localhost не отправил никаких данных».
Я также пытался использовать
kubectl get pods -o wide
и доступ к 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, любое приложение, работать с докером?
PS Я действительно использую такиепростое приложение, которое, даже если я создаю совершенно новое приложение .net core с поддержкой докеров, и пытаюсь сразу создать и запустить базовое приложение .net core, оно не работает. я не могу заставить его работать буквально с любым приложением ядра .net!