Невозможно получить доступ к основному приложению asp .net при запуске с докером на локальном компьютере или в kubernetes - PullRequest
0 голосов
/ 10 октября 2019

У меня очень простое базовое приложение 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!

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

Когда он говорит прослушивание http://[::]:80, он говорит о localhost в контейнере . Когда вы пытаетесь получить к нему доступ через http://localhost в веб-браузере, работающем на вашем компьютере, localhost - это ваш компьютер, , а не контейнер. Вам нужно использовать IP-адрес контейнера.

Из вашего описания, похоже, вы тоже это пробовали, но нет никаких причин, по которым у вас могут возникнуть какие-либо проблемы с этим. Вы либо не получили правильный IP-адрес, либо сделали что-то неправильное, не описанное здесь.

2 голосов
/ 10 октября 2019

В качестве целевого порта для переадресации портов вы используете 8080, но ваше приложение прослушивает порт 80. Измените настройку targetport на 80, и вы сможете подключиться к контейнеризованному приложению, как и ожидалось.

Возможно, вам также придется изменить настройку containerPort.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...