在window下调试部署netcore webapi时,看到的端口常是默认的5000或5001,当然我们可以在代码中或者launchSetting或者启动参数中修改端口。当使用docker部署时,默认端口却是【80】,这一点容易照成初学者在这里绕晕圈。

现记录测试修改的过程(非CI/CD):

1.安装docker环境

    略

2.生成Dockerfile文件

点击webapi所在项目右键点击添加--Docker支持,会生成默认Dockerfile

3.去掉自动生成的Dockerfile默认的配置,修改成以下内容

说明:

WORKDIR /app #进入当前容器中的工作目录(不要疑惑怎么创建,理解为自动创建并进入该目录)

EXPOSE 5000 #显示说明该容器暴露的端口,与生成容器无关

COPY zyhand.webapi .   #复制当前宿主目录下文件到容器中,使用宿主的相对路径,后面的“点号”不能少,点号表示上面使用WORKDIR进入的容器目录

ENV ASPNETCORE_URLS=http://+:5000  #要自定义的端口,为什么是这样的修改,下面会有分析过程

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 5000

COPY zyhand.webapi .
ENV ASPNETCORE_URLS=http://+:5000
ENTRYPOINT ["dotnet", "ZYHand.WebAPI.dll","--server.urls","http://*:5000"]

4.把发布后的源码上传到宿主机上,使用xftp上传至/publish/zyhand.webapi目录下

5.把Docker文件上传到宿主机上,上传至/publish目录下,与zyhand.webapi同级

6.切换至宿主机的/publish目录,生成镜像。

(netcore镜像pull:略)

说明:点号不能少,指定在当前目录查找Dockerfile文件生成镜像

docker build -t web1 .

生成后看到如下说明成功:

通过命令,看到有web1的镜像也说明创建成功

Docker images

7.创建容器并启动

docker run -i -t -d -p 8080:5000 --name=my-web1-1 web1 /bin/bash

8.访问链接,根据自己的代码链接不同

在宿主机中访问你自定义的链接,根据自己的代码不同:curl http://192.168.0.238:8080/api/user/userinfo?userid=1 返回正确说明成功

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

附分析为什么是默认80端口

查看依赖镜像的Dockerfile

 docker history --no-trunc mcr.microsoft.com/dotnet/core/aspnet:3.1

通过以上命令查看发现有指定80端口,所以在我们自己的Dockerfile中覆盖即可。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐