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

GitHub Actions中Docker容器无法连接Twitch IRC外部服务求助

问题描述

我正在基于Docker Compose构建微服务,尝试在GitHub Actions(GHA)中执行集成测试。本地测试全部通过,应用部署后运行正常,但在GHA环境中,聊天服务无法连接Twitch IRC服务器。奇怪的是该服务能完成登录操作,却无法发送消息。我推测是Docker Compose文件缺少关键网络配置,以下是GHA中使用的docker-compose.gha.yml文件及GitHub Action工作流文件,求解决思路。

docker-compose.gha.yml 文件内容

# docker-compose.gha.yml
# Copyright (C) 2023
# Squidpie

version: "3.5"
services:
    redis-test:
        build:
            context: ${STRAUSS_ROOT_DIR}
            dockerfile: ${STRAUSS_ROOT_DIR}/tests/redis/Dockerfile
        networks:
            - strauss
        depends_on:
            - redis

    chat-test:
        build:
            context: ${STRAUSS_ROOT_DIR}
            dockerfile: ${STRAUSS_ROOT_DIR}/tests/chat/Dockerfile
        networks:
            - strauss
        depends_on:
            - chat

    redis:
        image: redis:7.0.6-alpine
        container_name: redis
        networks:
            - strauss

    chat:
        image: strauss/chat:${STRAUSS_CHAT_PKG_VERSION}
        container_name: chat
        build:
            context: ${STRAUSS_ROOT_DIR}
            dockerfile: ${STRAUSS_ROOT_DIR}/services/chat/Dockerfile
            args:
                version: "prod"
                STRAUSS_BUILD_DIR: ${STRAUSS_BUILD_DIR}        
        environment:
            TWITCH_USER: ${TWITCH_USER}
            TWITCH_TOKEN: ${TWITCH_TOKEN}
        networks:
            - strauss
        volumes:
            - ./strauss.yml:/strauss/strauss.yml
        depends_on:
            - redis

networks:
    strauss:
        name: strauss
        driver: bridge

GitHub Action工作流文件(strauss-validate.yml)内容

# strauss-validate.yml
# Copyright (C) 2023
# Squidpie

name: strauss-validate
run-name: ${{ github.actor }} is validating strauss
on:
  push:
    branches:
      [dev, stage/*]
  pull_request:
    types: [assigned, opened, synchronize, reopened]
    branches:
      [dev]
  workflow_dispatch: {}

jobs:
  validate:
    name: Validate strauss
    runs-on: ubuntu-latest

    env:
      STRAUSS_ROOT_DIR: ${{ github.workspace }}
      STRAUSS_BUILD_DIR: target/debug
      
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Setup GitVersion
        uses: gittools/actions/gitversion/setup@v0.9.15
        with:
          versionSpec: '5.x'

      - name: Resolve Version
        id: gitversion
        uses: gittools/actions/gitversion/execute@v0.9.15
      
      - name: Setup Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.2'
          bundler-cache: true

      - name: Setup Strauss Env
        run: |
            ./scripts/gen-gha-env.sh
            cat .env > .env.runtime
            echo ${{ secrets.STRAUSS_SECRETS }} >> .env.runtime
            printf '%b\n' "services:\n    chat:\n        channel: <test channel>\n" > strauss.yml

      - uses: actions/cache@v3
        id: cache-rust
        with:
            path: |
                ~/.cargo/bin/
                ~/.cargo/registry/index/
                ~/.cargo/registry/cache/
                ~/.cargo/git/db/
                target/
            key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

      - name: Build & Unit Test Services
        run: docker compose --env-file .env -f strauss-build.debug.yml run build
      
      - name: Run Integration Tests
        run: |
            docker compose --env-file .env.runtime \
                -f docker-compose.gha.yml \
                up -d

      - name: Get Test Status
        run: |
            sleep 45
            docker logs `docker container ls -a | grep chat-test | awk '{print $1}'` | grep "PASSED" && \
            docker logs `docker container ls -a | grep redis-test | awk '{print $1}'` | grep "PASSED"

      - name: Inspect Dockers
        if: failure()
        run: |
            docker inspect `docker container ls -a | grep "strauss/chat" | awk '{print $1}'`
            docker inspect `docker container ls -a | grep "redis:7" | awk '{print $1}'`
            docker inspect `docker container ls -a | grep "chat-test" | awk '{print $1}'`
            docker inspect `docker container ls -a | grep "redis-test" | awk '{print $1}'`
      
      - name: Collect Docker Logs
        if: failure()
        uses: jwalton/gh-docker-logs@v2.2.1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:05:18