为什么nginx重定向不能与Docker容器一起使用?

时间:2018-04-30 10:25:50

标签: docker nginx http-redirect

我想在用户访问https时重定向到我的网站的http版本,该版本托管在Docker群中。

我正在尝试使用ngnix执行此操作,但是我正在使用的设置无效。我已经创建了一个新的Core 2.0 Web App,试图让它在最简单的环境中工作。除了Web App,我还有我的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运行它。我期待发生的是,当我导航到http://localhost:8006时,它会将我重定向到Google,但不会发生重定向。

任何人都能看到我做错的事吗?任何帮助都会受到大力赞赏。

1 个答案:

答案 0 :(得分:1)

它没有重定向您,因为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并等到它们都结束(即崩溃)。