首页 > 解决方案 > 在 github 操作 yml 文件中创建 Minio(S3) 容器

问题描述

我正在尝试创建一个 Minio/S3 容器,以便我可以在 github 上将我的测试套件作为操作运行。我目前有以下内容:

name: Run Tests
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-18.04

    services:
      postgres:
        ...

      minio:
        image: minio/minio
        volumes:
          - /data
        ports:
          - 9000:9000
        env:
          MINIO_ACCESS_KEY: minio
          MINIO_SECRET_KEY: minio123
        options: --entrypoint "minio server /data" --health-cmd "curl -f http://localhost:9000/minio/health/live" --health-interval 10s --health-timeout 5s --health-retries 5

    steps:
      ...

我尝试了以下排列以使 minio 容器工作但没有成功:

volumes:
  - ./data:/data

volumes:
  - ./:/data

volumes:
  - .:/data

volumes:
  - /data:/data

我什至尝试过:

options: --entrypoint "mkdir /data; minio server /data" ...

options: --entrypoint "minio server /tmp" ...

options: --entrypoint ["minio server", "/tmp"] ...

我曾尝试使用该-v标志在标志之前安装卷--entrypoint

options: -v /s3_data:/data --entrypoint "minio server /data" ...

options: -v ${{ github.workspace }}/s3_data:/data --entrypoint "minio server /data" ...

options: -v ${{ github.workspace }}/s3_data:/data:rw --entrypoint "minio server /data" ...

试图让它发挥作用。但不幸的是我得到:

starting container process caused: exec: "minio server /data": stat minio server /data: no such file or directory: unknown

而且我不能在minio server没有任何参数的情况下运行 :(

标签: dockeryamlcontainersgithub-actionsminio

解决方案


TL;博士;

存在一个正在进行的 GitHub Actions 社区线程,涉及缺乏对设置的支持jobs.<job_id>.services.<service_id>.command这个现有问题与您的问题非常相似


您可以按照@ahasbini的建议扩展官方镜像,然后构建并将您docker image的推送到Docker Registryimage并在GitHub Actions 中使用您自己的镜像jobs.<job_id>.services.<service_id>.image。例如:

Dockerfile: _

FROM minio/minio
CMD ["server", "/data", "--address=0.0.0.0:9000"]

注意:您可以使用lazybit/minio我为此答案构建的图像。

job.<job_id>.services.<service_id>规格:

jobs:
  ...
  minio:
    name: minio
    runs-on: ubuntu-latest
    services:
      minio:
        image: lazybit/minio
        ports:
          - 9000:9000
        env:
          MINIO_ACCESS_KEY: ${{ secrets.MINIO_ACCESS_KEY }}
          MINIO_SECRET_KEY: ${{ secrets.MINIO_SECRET_KEY }}
        volumes:
          - ${{ github.workspace }}/data:/data
        options: --name=minio --health-cmd "curl http://localhost:9000/minio/health/live"
    steps:
      - run: pip3 install minio
      - run: |
            python3 - <<'EOF'
            from minio import Minio
            from minio.error import ResponseError

            try:
                minio = Minio(
                    'localhost:9000',
                    access_key='${{ secrets.MINIO_ACCESS_KEY }}',
                    secret_key='${{ secrets.MINIO_SECRET_KEY }}',
                    secure=False
                )
            except Exception as ex:
                raise

            minio.make_bucket('foo')
            minio.make_bucket('bar')
            print(f'{minio.list_buckets()}')
            EOF

备注

  1. 图像当前minio/minio没有HEALTHCHECK指令(_ docker inspect minio/minio:latest --format {{.Config.Healthcheck}}_ --health-cmd_jobs.<job_id>.services.<service_id>.optionslivenessProbejobs.<job_id>.steps
  2. 我在按名称连接到服务时遇到了一些问题,因此我将minio端点设置为locahost:9000,GitHub Actions 在Kubernetes Pod中运行,它们共享相同的网络命名空间并且可以通过localhost
  3. 访问和_ _jobs.<job_id>.services.<service_id>.envjobs.<job_id>.steps.<step_id>.run
  4. 使用context将本地目录挂载为支持minio服务的卷githubworkspace

GitHub Actions minio 服务


推荐阅读