我正在尝试使用我用dotnet核心编写的小型WebApi来实现Docker。
Api似乎运行正常,因为当我用dotnet run
运行它时它正常启动并且可以在端口5000上访问。但是当我在Docker容器中运行它时它会启动,但我无法在暴露时到达它/映射端口。我正在使用VirtualBox在Windows 10上运行Docker。
我的Dockerfile如下所示:
FROM microsoft/aspnetcore-build:latest
COPY . /app
WORKDIR /app
RUN dotnet restore
EXPOSE 5000
ENV ASPNETCORE_URLS http://*:5000
ENTRYPOINT ["dotnet", "run"]
我正在建造像这样的人:
docker build -t api-test:v0 .
使用此命令运行它:
docker run -p 5000:5000 api-test:v0
运行命令的输出是:
Hosting environment: Production
Content root path: /app
Now listening on: http://localhost:5000
我也尝试了不同的绑定URL的方法:
http://+:5000
,http://0.0.0.0:5000
,http://localhost:5000
,... --urls
/ --server.urls
但没有成功。有谁看到我做错了什么或错过了什么?
答案 0 :(得分:1)
Now listening on: http://localhost:5000
绑定到localhost将不适用于您的方案。您需要将应用程序绑定到0.0.0.0才能使docker端口转发工作。完成后,您应该能够访问VM IP上的应用程序端口5000
答案 1 :(得分:1)
http://*:500
或类似内容监听所有端口(如果它在运行时打印localhost
,则无法正常工作)。docker-machine ip default
。答案 2 :(得分:1)
我找到了解决这个问题的方法。您需要做的就是将launchSettings.json更改为应用设置的"applicationUrl": "http://*:5000/"
。构建图像。然后在运行映像docker run -d -p 81:5000 aspnetcoreapp
后运行容器docker exec container_id ipconfig
的获取IP地址。然后在浏览器http://container_ip:5000/api/values中。由于某种原因,它不起作用http://localhost:81仍然需要找出原因。