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


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

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

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

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

Я делаю что-то не так?

2 2

2 ответа:

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

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

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

host.Run();

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

$ docker run -d -p 8080:5004 my_app

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

Вы также можете указать 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"]

Вам также необходимо изменить программу.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/