如何将带Nginx反向代理的ASP.NET Core Docker Compose栈部署到DigitalOcean
问题解决指南:Docker Compose镜像推送与DigitalOcean App Platform部署
一、解决docker-compose push报错问题
你执行docker-compose push registry.digitalocean.com/mycontainerregistry/projectweb报错是因为命令用法错误:
- docker-compose push不需要指定镜像地址,它会根据docker-compose.yml里每个服务的
image字段配置,推送对应的镜像 - 先修改docker-compose.yml,把服务的image字段改为注册表地址:
projectweb: image: registry.digitalocean.com/mycontainerregistry/projectweb build: context: . dockerfile: projectweb/Dockerfile reverseproxy: image: registry.digitalocean.com/mycontainerregistry/reverseproxy container_name: reverseproxy ports: - 80:80 - 443:443 restart: always - 重新构建镜像:
docker-compose build - 登录DigitalOcean容器注册表:
docker login registry.digitalocean.com - 直接执行推送命令即可:
docker-compose push
这样就能把两个服务的镜像都推送到DigitalOcean注册表了。
二、部署到DigitalOcean App Platform(带Nginx反向代理)
方式1:使用自定义Nginx容器作为反向代理
- 确保镜像已推送至DigitalOcean注册表(按照上面的步骤完成推送)
- 创建App Platform应用:
- 登录DigitalOcean控制台,进入App Platform,点击“Create App”
- 选择“Container Registry”作为来源,选中你推送的
reverseproxy和projectweb镜像
- 配置服务关系:
- 同一应用内的服务可通过内部域名访问,格式为
<服务名>.default.svc.cluster.local,所以nginx.conf里的反向代理目标要设置为http://projectweb.default.svc.cluster.local(根据实际服务名调整) - 给
reverseproxy服务配置对外暴露80和443端口,App Platform会自动处理SSL证书
- 同一应用内的服务可通过内部域名访问,格式为
- 部署应用:
- 确认配置后点击“Deploy”,等待部署完成即可
方式2:使用App Platform内置反向代理(更简便)
如果不需要自定义Nginx配置,可直接用平台自带的反向代理:
- 推送
projectweb镜像到DigitalOcean注册表 - 创建App Platform应用,选择该镜像作为服务
- 在服务配置中设置web服务的端口(如3000、8080)
- 平台会自动生成域名并配置SSL,无需额外Nginx容器
关键配置注意事项
- 本地测试用的nginx.conf示例(部署到平台需替换为内部域名):
events {} http { server { listen 80; server_name _; location / { proxy_pass http://projectweb:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } }
内容的提问来源于stack exchange,提问作者msd




