Невозможно открыть докернизированный .net core api на пользовательском порту - PullRequest
0 голосов
/ 16 марта 2019

docker-compose up myapp.sample.api

Creating network "myapp_frontend" with the default driver
myapp-sample-mssql-cnr is up-to-date
Creating myapp-sample-api-cnr ... done
Attaching to myapp-sample-api-cnr
myapp-sample-api-cnr       | warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
myapp-sample-api-cnr       |       No XML encryptor configured. Key {daa358c7-8c64-4e3c-90ea-06f48de12ad4} may be persisted to storage in unencrypted form.
myapp-sample-api-cnr       | Hosting environment: Development
myapp-sample-api-cnr       | Content root path: /app
myapp-sample-api-cnr       | Now listening on: http://[::]:5000
myapp-sample-api-cnr       | Application started. Press Ctrl+C to shut down.

Проблема здесь в том, что я не могу открыть свое веб-приложение API на указанном порту

http://localhost:5000 

возвращает Не удалось получить ответ от почтальона

Локально я могу открыть это приложение с помощью отладки в Visual Studio.

docker-compose.yml

version: '3.4'

networks:
    frontend:
    backend:

services:
    myapi.sample.api:        
        build:
            context: .
            dockerfile: MyApi.Sample.API/Dockerfile
        image: myappsampleapi-img          
        container_name: myapp-sample-api-cnr    
        ports:
            - "5000:80"
        networks:
            - backend
            - frontend
        depends_on:
            - mssqlserver

    mssqlserver:
        image: "microsoft/mssql-server-linux:latest"
        ports:
            - "1445:1433"

        container_name: myapp-sample-mssql-cnr        
        networks:
            - backend

Dockerfile

FROM microsoft/dotnet:2.2-aspnetcore-runtime as base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ...
...
ENTRYPOINT ["dotnet", "MyApi.Sample.API.dll"]

Я не могу получить какой-либо вывод журнала из контейнера API

docker logs -f myapp-sample-api-cnr

warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key {82dd75ea-8302-4859-a3e5-78eedf856e34} may be persisted to storage in unencrypted form.
Hosting environment: Development
Content root path: /app
Now listening on: http://[::]:5000
Application started. Press Ctrl+C to shut down.

Редактировать: Я пытался изменить Dockerfile, чтобы открыть порт 5000 вместо 80

FROM microsoft/dotnet:2.2-aspnetcore-runtime as base
WORKDIR /app
EXPOSE 5000

ина докере ps -a я получаю

CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                                                   NAMES
964724837d13         myappsampleapi-img                   "dotnet MyApi.S…"   45 seconds ago      Up 43 seconds       5000/tcp, 0.0.0.0:5000->80/tcp, 0.0.0.0:32788->80/tcp   myapp-sample-api-cnr

Все еще с той же проблемой, не могу получить ответ от API на localhost:5000

Ответы [ 2 ]

1 голос
/ 16 марта 2019

В вашем файле docker-compose.yml служба myapi.sample.api запускает процесс, который выдает следующий журнал:

...
Now listening on: http://[::]:5000

, что означает, что ваш процесс прослушивает порт 5000, связанный с IP-адрес контейнера .

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

Синтаксис директивы ports:это:

HOST:CONTAINER

или другими словами:

<port to open on the docker host>:<port already opened within the container>

Поскольку вы, похоже, хотите подключиться к порту 5000вашего контейнера при подключении к порту 5000 вашего хоста докера, директива ports: должна быть:

    ports:
      - 5000:5000
1 голос
/ 16 марта 2019

Кажется, что вы смешали порты в файле композитора.

Не должно быть 80: 5000?

Либо укажите оба порта (HOST: CONTAINER), либо просто порт контейнера (выбран временный порт хоста).

https://docs.docker.com/compose/compose-file/

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