运行部署到 Azure 应用服务的 alpine docker 容器在部署后不响应 ping

问题描述 投票:0回答:1

我正在尝试将运行 C# .Net 6 Web API 的 docker 映像部署到 Azure 应用服务(用于容器)。该服务当前使用

FROM mcr.microsoft.com/dotnet/aspnet:6.0
基本映像运行,但我想更改为
alpine:3.19
。更新后的 docker 文件如下所示:

# Build Stage
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /app

COPY MyProject/MyProject.csproj ./MyProject/

RUN dotnet restore MyProject/MyProject.csproj

COPY MyProject/* ./MyProject/

RUN dotnet publish --configuration Release --output out MyProject/MyProject.csproj

# Unit Test Runner

FROM build as unit-tests

WORKDIR /app/MyProject.UnitTests

COPY MyProject.UnitTests/. .

ENTRYPOINT [ "dotnet", "test"]

# Integration Test Runner

FROM build as integration-tests

WORKDIR /app/MyProject.IntegrationTests

COPY MyProject.IntegrationTests/. .

ENTRYPOINT [ "dotnet", "test"]

# Run Stage
FROM alpine:3.19
RUN apk update \
    && apk upgrade \
    && apk add --no-cache dotnet6-runtime \
    && apk add --no-cache  aspnetcore6-runtime
WORKDIR /app
COPY --from=build /app/out .
# Allow SSH access
COPY entrypoint.sh ./
COPY sshd_config /etc/ssh/
RUN apk update \
    && apk upgrade \
    && apk add --no-cache bash \
    && apk add --no-cache openssh \
    && apk add --no-cache tini \
    && apk add --no-cache netcat-openbsd \
    && echo "root:Docker!" | chpasswd \
    && chmod u+x ./entrypoint.sh \
    && cd /etc/ssh/ \
    && ssh-keygen -A

ENV PORT 80
EXPOSE 80
EXPOSE 443
EXPOSE 2222

ENTRYPOINT ["/sbin/tini", "--"]

CMD ["./entrypoint.sh"]

entrypoint.sh 看起来像这样:

#!/bin/bash
set -e
#--- Starting SSH
/usr/sbin/sshd
exec dotnet MyProject.dll

当我部署到应用程序服务时,容器启动。我可以从显示后台服务正在运行的日志中看出这一点。问题是容器似乎无法通过端口 80 访问。Web 应用程序启动过程会发出如下日志:

等待容器预热请求的响应 app_my-project_1_3addd53d。经过时间 = 30.5399342秒

最终失败之前:

2023-12-13T02:18:20.920Z 错误 - 容器 app_my-project_1_3addd53d 没有响应 端口 80 上的 HTTP ping,站点启动失败。查看容器日志 调试。 2023-12-13T02:18:20.970Z 信息 - 停止站点 app_my-project_1 因为它在 启动。

我尝试设置以下应用程序设置:

WEBSITES_PORT = 80

这并没有产生什么影响。从日志中我可以看到运行的是以下 docker 命令:

docker run -d --expose=80 --name app_my-project_1_3addd53d -e WEBSITE_USE_DIAGNOSTIC_SERVER=false -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITES_PORT=8080 -e WEBSITE_SITE_NAME=app_my-project -e WEBSITE_AUTH_ENABLED=False -e PORT=8080 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=app_my-project.azurewebsites.net -e WEBSITE_INSTANCE_ID=2f7d09e6f18b384667ff962cc75fe4cbeb8ff744d3ba3c5cc3766bd82eb68007 -e HTTP_LOGGING_ENABLED=1 myregistry.azurecr.io/app_my-project:tag 
docker azure-web-app-service port .net-6.0 alpine-linux
1个回答
0
投票

找到了!

我需要将以下内容添加到我的 Dockerfile 中:

ENV ASPNETCORE_URLS=http://+:80
© www.soinside.com 2019 - 2024. All rights reserved.