You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker环境下为Vapor配置ngrok自定义域名实现本地HTTPS连接

解决Docker+Vapor+ngrok配置问题的步骤

1. 修复ngrok镜像拉取错误

你使用的ngrok:latest镜像不存在,官方ngrok Docker镜像的正确名称是ngrok/ngrok:latest,替换后即可正常拉取。

2. 修正docker-compose.yml配置

需要调整镜像名称,补充完整端口映射,同时确保ngrok与Vapor容器处于同一Docker网络(如果Vapor也通过docker-compose部署)。修改后的配置示例:

version: '3.8'

services:
  # 你的Vapor服务,名称根据实际情况调整
  vapor-server:
    build: .
    ports:
      - "8080:8080"
    networks:
      - app-network

  ngrok:
    image: ngrok/ngrok:latest
    restart: unless-stopped
    command:
      - "start"
      - "--all"
      - "--config"
      - "/etc/ngrok.yml"
    volumes:
      - ./ngrok.yml:/etc/ngrok.yml
    ports:
      - "4040:4040"
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

3. 修正ngrok.yml配置

你之前把隧道指向了PostgreSQL的端口5433,这是错误的——隧道应该指向Vapor服务器的端口(默认8080)。同时调整host_header确保请求能正确转发到Vapor:

version: "2"
authtoken: <NGROK_PERSONAL_TOKEN>
tunnels:
  vapor-server:
    addr: vapor-server:8080  # 用docker-compose中Vapor服务的名称代替IP,容器间通过服务名通信
    proto: http
    host_header: rewrite  # 重写请求头,避免Vapor返回404
    domain: api.personal_domain.com

4. 修正Vapor的PostgreSQL配置

你把数据库hostname设为域名api.personal_domain.com是错误的。在Docker环境中,容器间需通过服务名通信:

app.databases.use(.postgres(
  hostname: "postgres",  // 替换为docker-compose中PostgreSQL服务的名称
  port: 5432,  // PostgreSQL默认端口为5432,若你修改过则保持原端口
  username: "user_stackoverflow",
  password: "password_stackoverflow",
  database: "personal_domain_db_develop"
), as: .psql)

如果PostgreSQL不在Docker中而是本地运行,hostname应设为host.docker.internal(Docker Desktop环境)或宿主机的实际IP。

5. 命令行方式的正确用法(临时测试)

若用命令行直接运行ngrok,需确保其能访问到本地Vapor服务:

# Docker Desktop(Mac/Windows)用host.docker.internal代替127.0.0.1
docker run -it -e NGROK_AUTHTOKEN=<NGROK_PERSONAL_TOKEN> --network host ngrok/ngrok http host.docker.internal:8080 --domain=api.personal_domain.com

# Linux环境用宿主机实际IP(如192.168.1.100)
docker run -it -e NGROK_AUTHTOKEN=<NGROK_PERSONAL_TOKEN> ngrok/ngrok http 192.168.1.100:8080 --domain=api.personal_domain.com

注意:ngrok的http子命令不需要加https://前缀。

6. 验证配置

  1. 启动所有服务:docker compose up -d
  2. 访问ngrok管理界面:http://localhost:4040,检查隧道状态是否正常
  3. 测试域名访问:curl https://api.personal_domain.com,确认Vapor返回正确响应

内容的提问来源于stack exchange,提问作者Roland Lariotte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:17:29