Невозможно запустить приложение в Docker, если используется любой другой порт, кроме порта по умолчанию 80 - PullRequest
0 голосов
/ 18 июня 2019

У меня есть демонстрационное приложение, которое размещено на докере. Открытый порт для Docker - 80, приложение работает на локальном компьютере, и я вижу целевую страницу для моего приложения на localhost: 8888.

Файл Docker указан ниже

FROM microsoft/aspnetcore:2.0
COPY dist /app
WORKDIR /app
EXPOSE 80/tcp
ENTRYPOINT ["dotnet", "demoapp.dll"]

Всякий раз, когда я меняю строку «EXPOSE 80 / tcp» на ex- «EXPOSE 8080 / tcp», «EXPOSE 5000 / tcp» и т. Д., Чтобы выставить любой другой порт, кроме 80 контейнера Docker, как указано во многих доступных онлайн-примерах кодов, Я не могу запустить свое приложение в браузере. Любой порт кроме 80 не работает.

Я могу создать изображение и создать контейнер для приложения тоже. Все идет хорошо, но когда я пытаюсь запустить приложение в браузере (localhost: 8080/5000/9000 и т. Д.), Целевая страница приложения не загружается.

Есть предложения? Нужно ли мне выполнить настройку порта или связаться с моей сетевой командой? или какой-то код, который мне здесь не хватает?

Ответы [ 3 ]

0 голосов
/ 18 июня 2019

Если ваше приложение работает на порту, предположим, что 8080, тогда убедитесь, что во время работы контейнера выполнено сопоставление портов.

docker run -itd -p 8080:8080 <image>

Это отобразит порт 8080 хоста напорт 8080 внутри контейнера.(-p hostport: containerport)

Если вы не хотите отображать порты, запустите docker container в режиме host.

docker run -itd --net=host <image>

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

0 голосов
/ 20 июня 2019

Для microsoft/aspnetcore он устанавливает переменную окружения ASPNETCORE_URLS на http://+:80, что означает, что если у вас нет явного определения, установите URL-адрес в своем приложении, например, через app.UseUrl в вашем Program.cs, а затем ваше приложение. будет прослушивать порт 80 внутри контейнера.

Ссылка: Microsoft / aspnetcore

Если вы хотите изменить порт 80 по умолчанию, вам нужно использовать UseUrls в Program.cs, как показано ниже, и использовать EXPOSE 8080/tcp в dockerfile.

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseUrls("http://+:8080")
        .UseStartup<Startup>();

Или вам нужно изменить ASPNETCORE_URLS среду, например

FROM microsoft/aspnetcore:2.0
COPY dist /app
WORKDIR /app
EXPOSE 8080/tcp
ENV ASPNETCORE_URLS=http://+:8080
ENTRYPOINT ["dotnet", "demoapp.dll"]

Команда для запуска

docker run -it -p 8080:8080 mytest
0 голосов
/ 18 июня 2019

Вы должны иметь возможность выставить любой порт внутри контейнера.Однако вы публикуете открытый порт на хосте во время запуска контейнера.Это делается с помощью флага -p команды docker run.

Когда вы говорите, что можете получить доступ к приложению с помощью localhost:8888, это означает, что вы запустили команду запуска docker с -p 8888:80.Это публикует порт 80 контейнера на хосте как порт 8888. Чтобы использовать любой другой порт, просто измените команду docker run на -p 8888:<new exposed port>, и это должно сделать это.

См. Справку команды запуска docker для получения дополнительной информации.: https://docs.docker.com/v17.12/edge/engine/reference/commandline/run/#publish-or-expose-port--p-expose

Опубликовать или открыть порт (-p, –expose)

$ docker run -p 127.0.0.1:80:8080 ubuntu bash

Это связывает порт 8080 контейнера с портом 80 на 127.0.0.1 хост-машины.Руководство пользователя Docker подробно объясняет, как управлять портами в Docker.

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