Docker-compose没有公开/映射端口,但是docker run可以正常工作

时间:2020-10-26 16:06:25

标签: docker asp.net-core docker-compose

我有一个ASP.NET Core应用程序。尽管我在 Windows 10上进行开发,但它是为 Linux 容器构建的。Docker在Linux容器模式下运行。

当我运行docker run -it --rm -p 5000:80 testh2 instance时,一切正常,并且我可以通过访问http:// localhost:5000来访问开发计算机上的网站

但是,当我尝试通过docker-compose up命令运行它时,它无法正常工作-容器启动正常,但是网站不可用({{1} )。

docker-compose如下:

localhost unexpectedly closed the connection.

Dockerfile如下:

version: '3.4'

services:
  hyena.webapp:
    image: ${DOCKER_REGISTRY-}testh2
    build:
      context: .
      dockerfile: Hyena.WebApp/Dockerfile
    ports:
      - "5000:80"

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base_image WORKDIR /appDir EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build_step WORKDIR /src COPY ["Hyena.WebApp/Hyena.WebApp.csproj", "Hyena.WebApp/"] COPY ["Hyena.Jobs.Contract/Hyena.Jobs.Contract.csproj", "Hyena.Jobs.Contract/"] RUN dotnet restore "Hyena.WebApp/Hyena.WebApp.csproj" COPY . . WORKDIR "/src/Hyena.WebApp" RUN dotnet build "Hyena.WebApp.csproj" -c Release -o /appDir/build FROM build_step AS publish_step RUN dotnet publish "Hyena.WebApp.csproj" -c Release -o /appDir/publish FROM base_image AS final_step WORKDIR /appDir COPY --from=publish_step /appDir/publish . ENTRYPOINT ["dotnet", "Hyena.WebApp.dll"] 映像是我通过从docker-compose.yml所在的文件夹(存储库根目录)中执行testh2手动构建的。

我认为在docker-compose中指定ports指令等效于将其作为参数传递给run命令吗?

我在做什么错了?

===========================================
更新

当我尝试将端口5000映射到443,并浏览到https:// localhost:5000时,它开始工作。 不知道为什么docker-compose会强制执行HTTPS,但事实确实如此。 不要将其发布为我的问题的答案,因为我实际上并不知道为什么

===========================================
更新2

与此有关的另一点奇特之处是,它仅在我从命令行运行docker build . -t testh2 -f Hyena.WebApp/Dockerfile时才有效。如果我使用Visual Studio的“运行”选项,则它不起作用-容器似乎运行良好,但是该应用程序在浏览器中不可用。

enter image description here

亲切的问候!

1 个答案:

答案 0 :(得分:0)

您以为正确--publish=5000:80转换为Docker Compose中的ports映射。

您在image中的hyena.webapp值看起来有些奇怪。您具有环境变量值和连字符:${DOCKER_REGISTRY-},但您可能想要${DOCKER_REGISTRY},并且,如果其值为https://docker.io/,则可能需要您的用户名和图像,即{ {3}}

但是,如果您已经在本地构建映像,则无需在Docker Compose中构建映像;使用docker rundocker-compose up中的同一张图片将消除构建步骤。

请尝试:

version: '3.4'

services:
  hyena.webapp:
    image: testh2
    ports:
      - "5000:80"

行得通吗?

如果这样做,那么您也可以加入build步骤:

version: '3.4'

services:
  hyena.webapp:
    image: testh2
    build:
      context: .
      dockerfile: Hyena.WebApp/Dockerfile
    ports:
      - "5000:80"

注意 https://docker.io被假定为注册表,因此您可以省略