net的核心项目。我已经成功地建立了该项目。下面是我的dockerfile。
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 4040
EXPOSE 5050
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["MWS.AspNetCoreApis/MWS.AspNetCoreApis.csproj", "MWS.AspNetCoreApis/"]
RUN dotnet restore "MWS.AspNetCoreApis/MWS.AspNetCoreApis.csproj"
COPY . .
WORKDIR "/src/MWS.AspNetCoreApis"
RUN dotnet build "MWS.AspNetCoreApis.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "MWS.AspNetCoreApis.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
CMD tail -f /dev/null
ENTRYPOINT ["dotnet", "MWS.AspNetCoreApis.dll"]
我构建我的应用程序为docker build -t locationservices .
在这里我构建我的图像。然后当我运行我的图像使用docker run -d locationservices
它给一些长的id。当我试图点击http://localhost:40/swagger/index.html或http://localhost:5050/swagger/index.html我的网页没有打开。当我运行〉docker运行-it位置服务我得到下面的消息。
宿主环境:生产内容根路径:/app正在侦听:http://[::]:80应用程序已启动。请按Ctrl+C关闭。
但我无法使用以下任何URL访问我的应用程序
http://localhost:5050/swagger/index.html
http://localhost:4040/swagger/index.html
http://localhost:80/swagger/index.html
有人能帮我解决这个问题吗?任何帮助都将不胜感激。谢谢
6条答案
按热度按时间kmb7vmvb1#
我回答这个问题有点晚了。
但实际的问题是,您告诉Docker要公开哪些端口,但它们与ASP .NETCore正在侦听的端口不匹配。
您需要将一个环境变量添加到与您的公开端口相匹配的Dockerfile中,如下所示。
文件的最后一行:
然后使用**-p 4040:4040**运行容器,这样它就可以将端口Map到“外部”世界。
fnx2tebb2#
您还可以将Docker容器运行参数直接添加到.csproj文件中:
i86rm4rw3#
我把
-p 80:80
后的图像名称时,它必须之前!错误和不起作用:
docker run image_name -p 80:80
正确:
docker run -p 80:80 image_name
gdx19jrr4#
在运行容器时必须发布端口,这样当您点击
localhost:someport
时,请求将被转发到容器。这可以通过在运行容器时使用--publish/-p
选项来完成:现在您可以访问
localhost:5050/swagger/index.html
和localhost:4040/swagger/index.html
。m4pnthwp5#
我有类似的问题,并找到了解决方案。你可以传递urls参数到你的入口点,以启动应用程序在一些特定的端口。例如:[“dotnet”,“监视”,“运行”,“--服务器. url”,“http://0.0.0.0:5050“]
如果你想在保存时看到任何更改,只需使用卷,否则你将不得不在更改后重新启动它。
我希望它会帮助你;)
vcudknz36#
在容器内部,应用绑定到端口80上的localhost。然而,这是在容器 * 内部 *。当你试图点击
http://localhost
时,该上下文中的localhost
是你的机器,而不是容器示例。你需要通过LAN上的IP访问容器,而不是localhost
。