Запуск проекта RC2 на определенном порту

Хорошо, я создал пустой проект RC2 и запустил его локально с помощью VS 2015, он работает.

Теперь я хочу развернуть его на Linux-сервере с помощью докера — так как же должен выглядеть мой файл докеров? Я следовал этим инструкциям, и вот что Я закончил с:

FROM microsoft/dotnet:1.0.0-preview1

COPY . /app
WORKDIR /app

RUN dotnet restore

EXPOSE 5004
ENTRYPOINT dotnet run

затем я создал свое приложение для изображения: docker build -t my_app .

и запустите с помощью: docker run -t -p 8080:5004 my_app

После этого я получил информацию о том, что образ запущен и прослушивается на локальном хосте: 5000. К сожалению, я пытался подключиться к этому серверу с помощью xxxx: 5000, xxxx: 5004 и xxxx: 8080, и ни один из этих адресов не работал (xxxx - это адрес сервера).

Я делаю что-то неправильно?


person Jakub Wisniewski    schedule 23.05.2016    source источник
comment
Проблема в том, что ваше приложение прослушивает localhost, а не внутренний IP-адрес, на который Docker перенаправляет запросы. Ознакомьтесь с этот вопрос для настройки вашего приложения для запуска на хосте, отличном от localhost.   -  person Daniel Grim    schedule 23.05.2016
comment
Я также наткнулся на [это руководство] [1], в котором показано, как добавить поддержку докеров в проект [1]: lostechies.com/gabrielschenker/2016/05/17/   -  person Jakub Wisniewski    schedule 23.05.2016


Ответы (2)


Вы можете указать пустельге, какой порт слушать, используя метод расширения UseUrls(), например:

(обычно это входит в метод точки входа Program.Main() для меня)

var host = new WebHostBuilder()
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseUrls("http://0.0.0.0:5004")
    .Build();

host.Run();

В этом случае вы должны запустить образ докера следующим образом:

$ docker run -d -p 8080:5004 my_app

Я выбрал вариант -d для работы в качестве демона. Просто убедитесь, что порт EXPOSED в вашем Dockerfile соответствует порту, указанному в UseUrls. Полный пример этого можно посмотреть в моем примере проекта на github: https://github.com/mw007/adventure-works

person Dave Mulford    schedule 27.05.2016

Вы также можете указать URL-адреса на уровне Dockerfile (лучше, если вы хотите повторно использовать контейнер). Вот полный Dockerfile:

FROM microsoft/dotnet

RUN printf "deb http://ftp.us.debian.org/debian jessie main\n" >> /etc/apt/sources.list

COPY . /app
WORKDIR /app
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]

EXPOSE 5000/tcp
ENTRYPOINT ["dotnet", "run", "--server.urls=http://0.0.0.0:5000"]

Вам также необходимо изменить файл Program.cs, чтобы считать конфигурацию из основных аргументов:

    public static void Main(string[] args)
    {
        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .AddEnvironmentVariables(prefix: "ASPNETCORE_")
            .Build();

        var host = new WebHostBuilder()
            .UseConfiguration(config)
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }

У вас есть пошаговое руководство и почему в этом сообщении в блоге: https://www.sesispla.net/blog/language/en/2016/05/running-asp-net-core-1-0-rc2-in-docker/

person sesispla    schedule 31.05.2016