我有一个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的“运行”选项,则它不起作用-容器似乎运行良好,但是该应用程序在浏览器中不可用。
亲切的问候!
答案 0 :(得分:0)
您以为正确--publish=5000:80
转换为Docker Compose中的ports
映射。
您在image
中的hyena.webapp
值看起来有些奇怪。您具有环境变量值和连字符:${DOCKER_REGISTRY-}
,但您可能想要${DOCKER_REGISTRY}
,并且,如果其值为https://docker.io/
,则可能需要您的用户名和图像,即{ {3}}
但是,如果您已经在本地构建映像,则无需在Docker Compose中构建映像;使用docker run
和docker-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
被假定为注册表,因此您可以省略