【问题标题】:GitHub Actions: How to run docker-compose in windows-latest and macos-latest?GitHub Actions:如何在 windows-latest 和 macos-latest 中运行 docker-compose?
【发布时间】:2020-11-02 22:02:03
【问题描述】:

我有一个用于 PR 的 GitHub Action 工作流,其中包含执行一些需要 PostgreSQL + SQL Serve 实例的 NET Core 虚拟测试的作业。

工作定义:

run-test:
  needs: [lint-commit, lint-code]
  strategy:
    matrix:
      os: [ubuntu-latest]
      dotnet: [3.1.201]
    fail-fast: false
  runs-on: ${{ matrix.os }}
  steps:
    - uses: actions/checkout@v2
    - name: Build the docker-compose stack
      run: docker-compose --file "./MessingUp.Tests/docker-compose.yml" up --detach
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: ${{ matrix.dotnet }}
    - name: Run Tests
      run: dotnet test

和 docker compose 文件,./MessingUp.Tests/docker-compose.yml:

version: "3.7"

services:

  sqlserver:
    image: mcr.microsoft.com/mssql/server:2019-CU3-ubuntu-18.04
    restart: unless-stopped
    environment:
      - MSSQL_PID=Express
      - ACCEPT_EULA=Y
      - SA_PASSWORD=MyPassword!
    ports:
      - 1433:1433

  postgres:
    image: postgres:12.3-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
      - POSTGRES_DB=postgres
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=root
    command:
      - postgres
      - -c
      - max_prepared_transactions=100
    ports:
      - 5432:5432
    # Needed because the postgres container does not provide a health check
    healthcheck:
      test: pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
      interval: 1m30s
      timeout: 10s
      retries: 3
      start_period: 40s

长话短说,上面的代码有效,我唯一的问题是我想知道如何使用docker-compose,以防我不是使用ubuntu-latest: p>

os: [windows-latest, macos-latest, ubuntu-latest]

因为在非 ubuntu 最新的操作系统中,它实际上不起作用:

windows-latest:

 Build the docker-compose stack15s
##[error]Process completed with exit code 1.
Run docker-compose --file "./MessingUp.Tests/docker-compose.yml" up --detach
Creating network "messinguptests_default" with the default driver
Pulling sqlserver (mcr.microsoft.com/mssql/server:2019-CU3-ubuntu-18.04)...
2019-CU3-ubuntu-18.04: Pulling from mssql/server
image operating system "linux" cannot be used on this platform
##[error]Process completed with exit code 1.

macos-latest:

 Build the docker-compose stack0s
##[error]Process completed with exit code 127.
Run docker-compose --file "./MessingUp.Tests/docker-compose.yml" up --detach
/Users/runner/runners/2.169.1/work/_temp/ccb3e6a1-fc89-4099-9bf2-2f4ca4bb1fb8.sh: line 1: docker-compose: command not found
##[error]Process completed with exit code 127.

使用ubuntu-latest时的输出:

Build the docker-compose stack43s

Run docker-compose --file "./MessingUp.Tests/docker-compose.yml" up --detach
Creating network "messinguptests_default" with the default driver
Pulling sqlserver (mcr.microsoft.com/mssql/server:2019-CU3-ubuntu-18.04)...
2019-CU3-ubuntu-18.04: Pulling from mssql/server
Digest: sha256:e064843673f08f22192c044ffa6a594b0670a3eb3f9ff7568dd7a65a698fc4d6
Status: Downloaded newer image for mcr.microsoft.com/mssql/server:2019-CU3-ubuntu-18.04
Pulling postgres (postgres:12.3-alpine)...
12.3-alpine: Pulling from library/postgres
Digest: sha256:bd975ce4ddb0cf271a3c0132afaa16894ccdbadd0a1e81aa5d1b12727bb43779
Status: Downloaded newer image for postgres:12.3-alpine
Creating messinguptests_sqlserver_1 ... 
Creating messinguptests_postgres_1  ... 

Creating messinguptests_sqlserver_1 ... done

Creating messinguptests_postgres_1  ... done

【问题讨论】:

    标签: docker docker-compose github-actions


    【解决方案1】:

    我看到了两个明显的问题,为什么 docker-compose 命令在 windows-latestmac-os 上失败。

    windows-latest runner 使用Windows containers 作为 Docker 后端引擎,您正在尝试将基于 Linux 的映像 (mcr.microsoft.com/mssql/server:2019-CU3-ubuntu-18.04) 与不兼容的 Windows 后端一起使用。这就是出现错误消息的原因:

    正在拉取 sqlserver (mcr.microsoft.com/mssql/server:2019-CU3-ubuntu-18.04)... 2019-CU3-ubuntu-18.04:从 mssql/server 拉取 镜像操作系统“linux”不能在这个平台上使用

    如果您访问DockerHub page dedicated for the image used,您可以阅读:

    Linux for Docker Engine 上的 Microsoft SQL Server 官方镜像。

    您应该使用与 Windows 容器后端兼容的不同映像,以使容器在 windows-latest 上运行。目前有两个官方镜像兼容 Windows 容器后端:

    以上 DockerHub 页面都提到:

    用于 Windows 容器的 Microsoft SQL Server Express。

    考虑到这一点,您应该在windows-latest runner 上使用其中一个来使docker-compose 命令正常工作。

    您可以在 Docker here 中阅读有关 SQLServer 的更多信息。

    说起macos-latestrunner,本例的报错信息略有不同:

    /Users/runner/runners/2.169.1/work/_temp/ccb3e6a1-fc89-4099-9bf2-2f4ca4bb1fb8.sh:第1行:docker-compose:找不到命令

    没有安装docker-compose 二进制文件,因此无法找到。如果您看到GitHub Actions Virtual Environments 页面,您可以探索每个跑步者中包含的软件。 ubuntu-latestwindows-latest 都已包含 docker-compose 命令,但未包含 macos-latest。由于某些licensing issues,它不包含它。您必须使用brew 自行安装命令:

    [...]
    runs-on: macOS-latest
    steps:
      - name: Install docker
        run: |
          brew install docker docker-machine docker-compose
          sudo docker –version
    [...]
    

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 2020-04-01
      • 2023-02-25
      相关资源
      最近更新 更多