【问题标题】:GitHub Actions: Is it possible to call the runner host from a Docker container?GitHub Actions:是否可以从 Docker 容器调用运行器主机?
【发布时间】:2020-12-29 18:59:21
【问题描述】:

在下面的 GitHub Actions 工作流程中,我执行了一个针对 Micronaut 应用程序运行集成测试的 Gradle 构建。此应用程序依赖于

  • 一个 MariaDB 数据库
  • security/image:0.1.15
jobs:
  build-test:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        java: [ '15' ]

    services:
      tempoapp-db:
        image: mariadb:10.4.15
        ports:
          - 3306:3306
        env:
          MYSQL_ROOT_PASSWORD: foo
          MYSQL_DATABASE: xoxo
          MYSQL_USER: bar
          MYSQL_PASSWORD: foobar

      security:
        image: security/image:0.1.15
        env:
          JAVA_TOOL_OPTIONS: "-Dcallback.url=http://<what to place here?>:8090"
        credentials:
          username: ${{ secrets.PACKAGES_USER }}
          password: ${{ secrets.PACKAGES_TOKEN }}
        ports:
          - 6000:8080

    steps:
      - name: Check out repository
        uses: actions/checkout@v2

      - name: Set up JDK
        uses: actions/setup-java@v1
        with:
          java-version: ${{ matrix.java }}

      - name: Build and test the application
        run: ./gradlew -s check publishToMavenLocal dockerPrepare

在集成测试阶段,需要security/image:0.1.15 Docker 容器才能访问在 Docker 主机上运行的 Micronaut 应用程序。在我的 Docker 桌面环境中,我通常使用主机名 host.docker.internal 来从容器访问主机。这似乎不适用于 GitHub Actions,因为我收到以下错误

io.micronaut.http.client.exceptions.HttpClientException: Connect Error: host.docker.internal: Name does not resolve
    at io.micronaut.http.client.netty.DefaultHttpClient.lambda$null$34(DefaultHttpClient.java:1119)
    at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)
    at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552)
    at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)
    at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)

有没有办法获取主机的 IP 地址或主机名?

security:
  image: security/image:0.1.15
  env:
    JAVA_TOOL_OPTIONS: "-Dcallback.url=http://<what to place here?>:8090"

【问题讨论】:

    标签: github-actions micronaut


    【解决方案1】:

    我已经设法解决了我的问题。这个答案给了我正确方向的提示(https://stackoverflow.com/a/60740997/960875

    AFAIK,在 Docker for Linux(标准发行版)的情况下,主机的 IP 地址将始终为 172.17.0.1(在 docker 的主网络上,请参阅 cmets 了解更多信息)。

    为了验证这一点,我添加了一个额外的工作流程步骤,它启动一个 Alpine Linux 容器并打印 Docker 主机 ip(感谢 @Nek

    1. 运行 Alpine Docker
    2. 更新依赖项(悄悄地)
    3. 安装iproute2包(安静)
    4. (很好地)显示主机的 ip
    5. 删除泊坞窗(感谢--rm arg)
    - name: Find Docker Host IP
      uses: addnab/docker-run-action@v1
      with:
        image: alpine:latest
        run: apk update > /dev/null && apk add iproute2 > /dev/null && ip -4 route show default | cut -d' ' -f3
    

    正如您在下面的屏幕截图中看到的,IP 是172.17.0.1

    所以我将 IP 添加到我的 security 容器的 JAVA_TOOL_OPTIONS 环境变量中,一切正常。

    jobs:
      build-test:
    
        runs-on: ubuntu-latest
        strategy:
          matrix:
            java: [ '15' ]
    
        services:
          tempoapp-db:
            image: mariadb:10.4.15
            ports:
              - 3306:3306
            env:
              MYSQL_ROOT_PASSWORD: foo
              MYSQL_DATABASE: xoxo
              MYSQL_USER: bar
              MYSQL_PASSWORD: foobar
    
          security:
            image: security/image:0.1.15
            env:
              JAVA_TOOL_OPTIONS: "-Dcallback.url=http://172.17.0.1:8090"
            credentials:
              username: ${{ secrets.PACKAGES_USER }}
              password: ${{ secrets.PACKAGES_TOKEN }}
            ports:
              - 6000:8080
    
        steps:
          - name: Check out repository
            uses: actions/checkout@v2
    
          - name: Set up JDK
            uses: actions/setup-java@v1
            with:
              java-version: ${{ matrix.java }}
    
          - name: Build and test the application
            run: ./gradlew -s check publishToMavenLocal dockerPrepare
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-05
      • 2019-03-26
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 2020-07-28
      相关资源
      最近更新 更多