我有Dockerfile
:
FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /build
COPY . .
RUN dotnet restore
RUN dotnet publish -c Release -o output
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build /build/output .
ENTRYPOINT ["dotnet","TestDockerApi.dll"]
我正在使用以下方式创建图像:
docker build -t testdocker/api .
然后使用:
从图像运行容器docker run testdocker/api
我可以在控制台上看到以下消息:
托管环境:生产
内容根路径:/ app
现在听取:http://[::]:80
申请开始了。按Ctrl + C关闭。
我尝试使用http://localhost/app/TestDockerApi/Values进行访问,但它不起作用。
我是否需要使用docker image IP来访问它。
我可以看到很少有教程建议在Entrypoint中执行此操作:
ENTRYPOINT ["dotnet","TestDockerApi.dll","--server.urls","http://0.0.0.0:5000"]
然后在运行容器时,映射端口:
docker run -p 80:5000 testdocker/api
有没有办法在不使用portforwarding的情况下访问API?我只是想把基础知识弄清楚,为什么以及我该怎么做。
答案 0 :(得分:3)
Dockerfile根本不管理容器外的网络配置。如果您希望docker侦听80的主机端口,则需要在运行容器时绑定它。
docker run -80:80 testdocker/api
有关映射和公开端口的更多说明,请参阅此处: - https://www.ctl.io/developers/blog/post/docker-networking-rules/
或者,您可以创建自己的服务组合,在其中指定这些详细信息并在docker-compose.yml
文件中指定
api:
image: testdocker/api
ports:
- "80:80"
然后你可以简单地用
运行docker-compose up
更多信息请访问: