如何在docker

时间:2018-04-14 03:25:02

标签: docker containers dockerfile

我有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?我只是想把基础知识弄清楚,为什么以及我该怎么做。

1 个答案:

答案 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 

更多信息请访问: