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

添加API网关后Okteto服务反复重启失败求助

问题描述

使用Okteto部署项目服务,此前运行正常,添加api-gateway后,其中一个服务出现反复重启后失败的情况。

main-flow.yaml

name: Build and deliver containers

on: push

jobs:
  customerservice:
    runs-on: ubuntu-latest
    name: Java 17 build, test, deliver customer-service container
    steps:
      - name: Check out repository
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: 17
          cache: maven
          distribution: adopt

      - name: Build, test and package project
        working-directory: customer-service
        run: mvn package -DskipTests

      - name: Docker login
        run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }}

      - name: Docker Build
        run: docker build -t ${{ secrets.DOCKER_USER }}/customer-service:latest ./customer-service

      - name: Upload container to Docker Hub with Push
        run: docker push ${{ secrets.DOCKER_USER }}/customer-service:latest
  taxiservice:
    runs-on: ubuntu-latest
    name: Java 17 build, test, deliver taxi-service container
    steps:
      - name: Check out repository
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: 17
          cache: maven
          distribution: adopt

      - name: Build, test and package project
        working-directory: taxi-service
        run: mvn package -DskipTests

      - name: Docker login
        run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }}

      - name: Docker Build
        run: docker build -t ${{ secrets.DOCKER_USER }}/taxi-service:latest ./taxi-service

      - name: Upload container to Docker Hub with Push
        run: docker push ${{ secrets.DOCKER_USER }}/taxi-service:latest
  tripservice:
    runs-on: ubuntu-latest
    name: Java 17 build, test, deliver trip-service container
    steps:
      - name: Check out repository
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: 17
          cache: maven
          distribution: adopt

      - name: Build, test and package project
        working-directory: trip-service
        run: mvn package -DskipTests

      - name: Docker login
        run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }}

      - name: Docker Build
        run: docker build -t ${{ secrets.DOCKER_USER }}/trip-service:latest ./trip-service

      - name: Upload container to Docker Hub with Push
        run: docker push ${{ secrets.DOCKER_USER }}/trip-service:latest
  apigateway:
    runs-on: ubuntu-latest
    name: Java 17 build, test, deliver ede-api-gateway container
    steps:
      - name: Check out repository
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: 17
          cache: maven
          distribution: adopt

      - name: Build, test and package project
        working-directory: ./api-gateway
        run: mvn package -DskipTests

      - name: Docker login
        run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }}

      - name: Docker Build
        run: docker build -t ${{ secrets.DOCKER_USER }}/ede-project-api-gateway:latest ./api-gateway

      - name: Upload container to Docker Hub with Push
        run: docker push ${{ secrets.DOCKER_USER }}/ede-project-api-gateway:latest

docker-compose.yaml

services:
  mongo-customers:
    image: mongo:latest
    ports:
      - 27017:27017
    volumes:
      - mongodb_customer_data:/data/db

  mysql-trip:
    image: mysql:latest
    ports:
      - 3306:3306
    volumes:
      - mysql_trip_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: trippassword

  mysql-taxi:
    image: mysql:latest
    ports:
      - 3307:3306
    volumes:
      - mysql_taxi_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: taxipassword

  customer-service:
    depends_on:
      - mongo-customers
    image: compacte/customer-service
    ports:
      - 8081:8081
    links:
      - mongo-customers
    environment:
      MONGODB_PORT: 27017
      MONGODB_HOST: mongo-customers

  taxi-service:
    depends_on:
      - mysql-taxi
    image: compacte/taxi-service
    ports:
      - 8082:8082
    links:
      - mysql-taxi
    environment:
      MYSQL_DB_USERNAME: root
      MYSQL_DB_PASSWORD: taxipassword
      MYSQL_DB_HOST: mysql-taxi
      MYSQL_DB_PORT: 3307

  trip-service:
    depends_on:
      - taxi-service
      - customer-service
    image: compacte/trip-service
    ports:
      - 8083:8083
    links:
      - taxi-service
      - customer-service
    environment:
      CUSTOMER_SERVICE_BASEURL: customer-service:8081
      TAXI_INFO_SERVICE_BASEURL: taxi-service:8082
      MYSQL_DB_USERNAME: root
      MYSQL_DB_PASSWORD: trippassword
      MYSQL_DB_HOST: mysql-trip
      MYSQL_DB_PORT: 3306
    
  api-gateway:
    depends_on:
      - taxi-service
      - trip-service
    image: compacte/ede-project-api-gateway
    ports:
      - 8084:8084
    links:
      - taxi-service
      - trip-service
    environment:
      TAXI_SERVICE_BASEURL: taxi-service:8082
      TRIP_SERVICE_BASEURL: trip-service:8083

volumes:
  mongodb_customer_data:
  mysql_taxi_data:
  mysql_trip_data:

排查建议

  • 优先查看服务日志:执行okteto logs <失败服务名>或在Okteto控制台查看具体报错信息,比如数据库连接超时、服务调用失败、内存不足等,这是最快定位问题的方式。
  • 验证依赖服务就绪状态:depends_on仅保证容器启动顺序,不确保服务可用。例如trip-service依赖的taxi-service可能在MySQL未完成初始化时就启动,导致连接失败。可以给数据库和服务添加健康检查:
    mysql-taxi:
      # 原有配置
      healthcheck:
        test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
        interval: 10s
        timeout: 5s
        retries: 5
    taxi-service:
      depends_on:
        mysql-taxi:
          condition: service_healthy
    
  • 检查资源配额:Okteto存在资源限制,新增api-gateway后可能导致总内存/CPU超出配额,触发OOM杀死服务。前往Okteto控制台查看资源使用情况,可给各服务添加资源限制:
    taxi-service:
      # 原有配置
      resources:
        requests:
          memory: "256Mi"
          cpu: "100m"
        limits:
          memory: "512Mi"
          cpu: "500m"
    
  • 核对API网关配置:检查api-gateway的路由规则是否正确,是否存在循环调用或错误转发导致目标服务负载过高。查看api-gateway日志,确认它能正常连接到taxi-service和trip-service。
  • 校验环境变量:确认失败服务的环境变量配置,比如trip-service的MySQL端口为容器内部的3306(而非宿主机端口),当前配置看起来正确,但可再次核对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:05:55