Запуск проекта 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 ответа:
Вы можете указать 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/