我正在尝试将服务设置为在Docker本地运行,但是在访问它时遇到了问题。这是我的Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:3.0.102-buster AS runtime
ENV ASPNETCORE_URLS http://+:8080
EXPOSE 8080
WORKDIR /app
COPY out ./
COPY secrets /secrets
ENTRYPOINT ["dotnet", "MyProject.dll"]
这是我用来运行它的命令:
docker run -it --link redis:redis --name myProject -p 8080:8080 my-project
该服务启动正常,没有任何问题。如果我执行该容器操作,则可以将我的运行状况检查端点卷曲在http://localhost:8080/api/healthcheck
处并获取200状态代码。
但是,当我尝试从主机访问它时,好像它不存在。我尝试在我上面卷曲的相同地址处点击它,但没有任何反应。我希望在暴露并转发端口8080时能够做到这一点。
我读到您应该尝试使用其私有IP地址来访问它,该IP地址通过docker inspect myProject
命令,它告诉我docker容器的网关为172.17.0.1
,而我的容器的地址为172.17.0.3
。因此,如果我尝试在http://172.17.0.1:8080/api/healthcheck
处击中它,我也希望它返回200,但没有任何反应。
我还读到Windows在同一主机上的Docker容器上遇到了一些问题,对此的补救措施是像我上面尝试的那样打入其私有IP地址,但我一无所获。
或者,我尝试摆脱Dockerfile上的EXPOSE
和ENV
行,以使服务分别在http:// https / 5000/5001的典型开发端口上运行,但是我得到了结果相同。
我还尝试将运行命令运行为:docker run -it -p 127.0.0.1:5000-5001:5000-5001 --link test-redis:redis --name myProject my-project
,这会导致docker ps -a
命令明确指出端口为127.0.0.1:5000-5001->5000-5001/tcp
,但我无济于事。
最后,我注意到我无法ping通172.17.0.1或172.17.0.3 IP地址。我认为这一定与它有关,但我不知道到底是什么。
我很茫然。我现在不知道该怎么办。谁能给我任何指导?