Почему перенаправление nginx не работает с контейнером Docker? - PullRequest
0 голосов
/ 30 апреля 2018

Я хочу перенаправить пользователя, когда он заходит на https, на http-версию моего веб-сайта, которая размещена в рое Docker.

Я пытаюсь сделать это с помощью ngnix, однако используемая мной установка не работает. Я создал новое веб-приложение Core 2.0, чтобы попытаться заставить его работать в самом простом из возможных контекстов. В дополнение к веб-приложению у меня также есть Dockerfile:

FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build nginx image to redirect http to https
FROM nginx:alpine

EXPOSE 80
COPY nginx.conf /etc/nginx/nginx.conf

# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "RedirectService.dll"]

и мой файл nginx:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 301 https://www.google.co.uk;
}

После создания моего изображения я запускаю его с docker run -p 8006:80 redirectservice. Что я ожидаю, так это то, что он перенаправит меня в Google, когда я перейду на http://localhost:8006, однако перенаправление не происходит.

Может кто-нибудь увидеть что-то, что я делаю не так? Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 30 апреля 2018

Это не перенаправляет вас, потому что процесс nginx не запущен. Посмотрите на изображение nginx Dockerfile (https://github.com/nginxinc/docker-nginx/blob/590f9ba27d6d11da346440682891bee6694245f5/mainline/alpine/Dockerfile) - последняя строка:

CMD ["nginx", "-g", "daemon off;"]

В вашем Dockerfile вы заменили его на:

ENTRYPOINT ["dotnet", "RedirectService.dll"]

И, таким образом, nginx никогда не запускается.

Вам необходимо создать сценарий sh, в котором вы будете запускать nginx и dotnet и ждать, пока оба они не завершатся (т.е. произойдет сбой).

...