.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 run -it locationservices时,出现以下消息。
托管环境:Production Content根路径:/ app现在正在监听 on:http://[::]:80应用程序已启动。按Ctrl + C关闭。
但是我无法使用以下任何URL来打我的应用
http://localhost:5050/swagger/index.html
http://localhost:4040/swagger/index.html
http://localhost:80/swagger/index.html
有人可以帮助我解决问题。任何帮助,将不胜感激。谢谢
答案 0 :(得分:1)
运行容器时,必须发布端口,以便在单击localhost:someport
时将请求转发到容器。这是通过在运行容器时使用--publish/-p
选项来完成的:
docker run -d -p 4040:4040 -p 5050:5050 locationservices
现在您可以访问localhost:5050/swagger/index.html
和localhost:4040/swagger/index.html
。
答案 1 :(得分:1)
我有类似的问题并找到了解决方案。您可以将urls参数传递给入口点,以在某个特定端口上启动应用程序。示例:ENTRYPOINT [“ dotnet”,“监视”,“运行”,“-server.urls”,“ http://0.0.0.0:5050”]
如果要查看保存时的任何更改,请仅使用卷,否则必须在更改后重新启动它。
我希望它将对您有帮助;)
答案 2 :(得分:1)
这个问题我来晚了。
但是实际的问题是,您正在告诉docker公开哪些端口,但它们与ASP.NET Core正在侦听的端口不匹配。
您需要将Docker变量添加到与您的暴露端口相匹配的环境变量。
EXPOSE 4040
ENV ASPNETCORE_URLS=http://*:4040
文件的最后一行:
ENTRYPOINT ["dotnet", "myapp.dll"]
然后使用 -p 4040:4040 运行容器,以将端口映射到“外部”世界。
答案 3 :(得分:0)
在容器内部,应用程序绑定到端口80上的localhost。但是,这是在容器内部 。当您尝试命中http://localhost
时,localhost
就是您的机器,而不是容器实例。您需要通过LAN上的IP而不是localhost
来访问容器。