跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C#

在银河麒麟 V10 上使用 Docker 和 Compose 部署 .NET 8 WebAPI

在银河麒麟 V10 服务器上通过 Docker 和 Compose 部署 .NET 8 WebAPI 的完整流程,包括环境准备、Docker 安装、项目创建、Dockerfile 与 Compose 编写、容器构建运行、自启动配置、HTTPS 与数据库集成,以及常见问题处理。

SqlMaster发布于 2026/6/30更新于 2026/10/1873 浏览

注意:微软目前尚未发布 .NET 10 版本,这里使用当前最新的 LTS 版本 .NET 8。未来如果 .NET 10 正式发布,部署流程基本类似,只需更新 Docker 镜像版本即可。

在银河麒麟 V10 服务器上跑 .NET 8 WebAPI,用 Docker 是最省事的方式。下面记录从零开始搭建的完整步骤,包括环境准备、Docker 安装、项目创建、Dockerfile 和 Compose 编写、部署运行、自启动配置以及常见问题处理。

系统环境准备

更新系统并安装常用工具:

sudo yum update -y
sudo yum install -y wget curl vim git

Docker 安装与配置

银河麒麟基于 CentOS,所以直接用 yum 安装 Docker 官方的社区版:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
sudo docker --version

接着安装 Docker Compose,从 GitHub 下载二进制:

curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version

防火墙方面,放行 Docker 服务和 API 常用端口 5000/5001:

sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --permanent --zone=public --add-service=docker
sudo firewall-cmd --permanent --zone=public --add-port=5000/tcp
sudo firewall-cmd --permanent --zone=public --add-port=5001/tcp
sudo firewall-cmd --reload

创建 .NET 8 WebAPI 项目

你可以在 Windows 上装好 SDK 创建项目再传到服务器,也可以直接在服务器上安装 .NET 8 SDK 来创建。两种方式任选一种。

如果在 Windows 开发机上做:

winget install Microsoft.DotNet.SDK.8
mkdir KylinDotNetWebAPI
cd KylinDotNetWebAPI
dotnet new webapi -n KylinDotNetWebAPI -o .
dotnet new gitignore
dotnet run
# 访问 http://localhost:5200/WeatherForecast 测试

如果想在服务器上直接创建并预览,下载安装脚本:

wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod +x dotnet-install.sh
./dotnet-install.sh -c 8.0 --install-dir /usr/share/dotnet
export DOTNET_ROOT=/usr/share/dotnet
export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools
mkdir -p /opt/dotnet/KylinDotNetWebAPI
cd /opt/dotnet/KylinDotNetWebAPI
dotnet new webapi -n KylinDotNetWebAPI -o .
dotnet run

项目结构大概是这样:

KylinDotNetWebAPI/
├── Controllers/       # 示例控制器
├── Properties/        # 启动配置
├── appsettings.json
├── appsettings.Development.json
├── Program.cs
├── KylinDotNetWebAPI.csproj
└── .gitignore

Dockerfile 与 Compose 配置

在项目根目录创建 Dockerfile,使用多阶段构建缩小最终镜像体积:

# 阶段 1:构建
FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
WORKDIR /src
COPY ["KylinDotNetWebAPI.csproj", "./"]
RUN dotnet restore "./KylinDotNetWebAPI.csproj"
COPY . .
WORKDIR "/src/"
RUN dotnet build "KylinDotNetWebAPI.csproj" -c Release -o /app/build
RUN dotnet publish "KylinDotNetWebAPI.csproj" -c Release -o /app/publish /p:UseAppHost=false

# 阶段 2:运行
FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine AS base
WORKDIR /app
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY --from=build /app/publish .
EXPOSE 5000
EXPOSE 5001
ENV ASPNETCORE_URLS=http://+:5000;https://+:5001
ENTRYPOINT ["dotnet", "KylinDotNetWebAPI.dll"]

同时添加 .dockerignore 文件,避免把不必要的文件打包进上下文:

bin/
obj/
*.swp
*.swo
*~
logs/
*.log
*Tests*/
*.Tests.csproj
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
.idea/
.vscode/
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

再用 Compose 管理容器,创建 docker-compose.yml:

version: '3.8'
services:
  kylin-webapi:
    image: kylin-dotnet-webapi:latest
    container_name: kylin-dotnet-webapi
    restart: always
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - ASPNETCORE_HTTP_PORTS=5000
      - ASPNETCORE_HTTPS_PORTS=5001
    ports:
      - "5000:5000"
      - "5001:5001"
    volumes:
      - ./logs:/app/logs
    networks:
      - dotnet-network

networks:
  dotnet-network:
    driver: bridge

构建、运行与验证

进入项目目录,先构建镜像:

cd /opt/dotnet/KylinDotNetWebAPI
docker-compose build

或者直接用 docker 命令:

docker build -t kylin-dotnet-webapi:latest .

启动服务:

docker-compose up -d

也可以不用 Compose,手动运行:

docker run -d \
  --name kylin-dotnet-webapi \
  --restart always \
  -p 5000:5000 \
  -p 5001:5001 \
  -e ASPNETCORE_ENVIRONMENT=Production \
  kylin-dotnet-webapi:latest

查看容器状态与日志:

docker-compose ps
docker-compose logs -f
# 或
docker ps
docker logs -f kylin-dotnet-webapi

服务启动后,用 curl 测试 API:

curl http://localhost:5000/WeatherForecast

如果从外部访问,用服务器的 IP,浏览器打开 http://服务器IP:5000/WeatherForecast 即可。HTTPS 首次访问时可能有证书警告,生产环境请换正式证书。

健康检查可以简单发个 HEAD 请求:

curl -I http://服务器IP:5000/WeatherForecast

应该返回 200。

配置与优化

应用配置主要通过 appsettings.json 和环境变量。修改配置文件后需要重建镜像并重启容器:

docker-compose up -d --build

环境变量可以在 docker-compose.yml 里加,例如数据库连接:

environment:
  - ConnectionStrings__DefaultConnection=Server=db;Database=WebAPIDemo;User=sa;Password=YourStrongPassword123!

日志配置在 appsettings.json 中:

"Logging": {
  "LogLevel": {
    "Default": "Information",
    "Microsoft.AspNetCore": "Warning"
  },
  "File": {
    "LogLevel": { "Default": "Information" },
    "Path": "/app/logs/webapi.log",
    "RollingInterval": "Day"
  }
}

如果想追求更高性能,可以考虑启用 AOT 编译(.NET 7+ 支持),但需要修改项目文件和发布命令,编译时长会变长,启动更快,镜像更小。这里不展开,可以自行查阅文档。

开机自启动

容器已经设置了 restart: always,但要保证 Docker 服务本身是开机自启的:

sudo systemctl enable docker

如果用了 Compose,可以创建一个 systemd 单元,让服务器重启时自动拉起 Compose 服务:

cat > /etc/systemd/system/kylin-dotnet-webapi.service <<EOF
[Unit]
Description=Kylin .NET 8 WebAPI Docker Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/dotnet/KylinDotNetWebAPI
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable kylin-dotnet-webapi
sudo systemctl start kylin-dotnet-webapi
sudo systemctl status kylin-dotnet-webapi

常见问题

端口被占用:用 netstat -tuln | grep 5000 查占用的进程,杀掉即可。

容器启动失败:查看日志 docker-compose logs -f 或 docker events --since 1h。

API 返回 500:进容器看应用日志 docker exec -it kylin-dotnet-webapi tail -f /app/logs/webapi.log。

依赖项问题:在项目目录执行 dotnet restore 和 dotnet build。

数据库连接不上:检查连接字符串和数据库服务是否正常,网络是否互通。

高级功能

HTTPS 配置

生成自签名证书(仅测试用):

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
export password=YourCertificatePassword123!
openssl pkcs12 -export -out certificate.pfx -inkey key.pem -in cert.pem -passout pass:$password

然后在 Compose 里挂载证书并设置密码:

volumes:
  - ./certificate.pfx:/app/certificate.pfx
environment:
  - ASPNETCORE_Kestrel__Certificates__Default__Password=YourCertificatePassword123!
  - ASPNETCORE_Kestrel__Certificates__Default__Path=/app/certificate.pfx

集成数据库(以 MySQL 为例)

在 Compose 中添加 MySQL 服务,并让 WebAPI 依赖它:

services:
  kylin-webapi:
    # ... 已有配置
    depends_on:
      - mysql
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=YourRootPassword123!
      - MYSQL_DATABASE=WebAPIDemo
      - MYSQL_USER=webapi
      - MYSQL_PASSWORD=YourStrongPassword123!
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - dotnet-network

volumes:
  mysql-data:

Nginx 反向代理

如果需要通过域名访问,可以在前面加一层 Nginx,配置如下:

cat > /opt/docker/nginx/conf/conf.d/webapi.example.com.conf <<EOF
server {
  listen 80;
  server_name webapi.example.com;
  location / {
    proxy_pass http://服务器IP:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection keep-alive;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_cache_bypass $http_upgrade;
  }
}
EOF

以上就是部署的全过程,从环境准备到服务跑起来,再到加自启动和扩展功能都覆盖了。如果只跑个简单的 API,其实用不到这么多步骤,按需裁剪即可。参考资料放在文末,有问题可以查阅。

参考资料

  • .NET 8 官方文档
  • Docker 官方文档
  • 银河麒麟 v10 服务器版官方文档
  • ASP.NET Core WebAPI 文档

目录

  1. 系统环境准备
  2. Docker 安装与配置
  3. 创建 .NET 8 WebAPI 项目
  4. 访问 http://localhost:5200/WeatherForecast 测试
  5. Dockerfile 与 Compose 配置
  6. 阶段 1:构建
  7. 阶段 2:运行
  8. 构建、运行与验证
  9. 或
  10. 配置与优化
  11. 开机自启动
  12. 常见问题
  13. 高级功能
  14. HTTPS 配置
  15. 集成数据库(以 MySQL 为例)
  16. Nginx 反向代理
  17. 参考资料

更多推荐文章

查看全部
  • AI 绘画提示词实战指南:从基础原理到高效创作
  • 安卓手机使用 Termux 部署 AstrBot QQ 机器人
  • 房屋租赁管理系统的设计与实现
  • 基于 AR 眼镜的 Android 亲戚称呼助手开发
  • LangChain 入门指南:构建语言模型应用
  • 快速排序非递归实现详解
  • 用 pthread 实现一个 C++ 线程池
  • 自然语言训练 OpenClaw:打造本地全能 AI 助手,支持 SQL 与办公自动化
  • 用 Prompt 生成正则表达式进行文本匹配实战
  • 使用 Elastic Agent Builder A2A 构建 Discord 游戏支持机器人
  • C 语言 Web 开发实战:CGI、FastCGI 与 Nginx 模块详解
  • PyTorch 生成式人工智能(29):基于 Transformer 生成音乐
  • 基于 DeepSeek 与 Cursor 构建智能代码审查工具实战
  • AIGC 时代如何打造卓越的技术文档
  • 基于 Rokid 灵珠平台的 AI Glasses 作业助手开发指南
  • CMake 跨平台安装指南:Windows、Linux 与 macOS 配置详解
  • .NET 到 Java 迁移指南:思维转换与 Spring Boot 实战
  • MacOS 极简部署 OpenClaw:Docker 版 + 飞书集成
  • 什么是 llama.cpp:本地高效运行大语言模型的核心框架
  • 开放代码的能源管理:经济、安全与创新

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online