在 github actions yml 文件中创建 Minio(S3) 容器

Sev*_*ths 6 containers yaml docker minio github-actions

我正在尝试创建一个 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:
      ...
Run Code Online (Sandbox Code Playgroud)

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

volumes:
  - ./data:/data

volumes:
  - ./:/data

volumes:
  - .:/data

volumes:
  - /data:/data
Run Code Online (Sandbox Code Playgroud)

我什至尝试过:

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

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

options: --entrypoint ["minio server", "/tmp"] ...
Run Code Online (Sandbox Code Playgroud)

我尝试使用该-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" ...
Run Code Online (Sandbox Code Playgroud)

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

starting container process caused: exec: "minio server /data": stat minio server /data: no such file or directory: unknown
Run Code Online (Sandbox Code Playgroud)

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

mas*_*eyb 8

TL;博士;

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


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

Dockerfile

FROM minio/minio
CMD ["server", "/data", "--address=0.0.0.0:9000"]
Run Code Online (Sandbox Code Playgroud)

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

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

FROM minio/minio
CMD ["server", "/data", "--address=0.0.0.0:9000"]
Run Code Online (Sandbox Code Playgroud)

注意事项

  1. 这些minio/minio映像当前没有HEALTHCHECK指令集 ( docker inspect minio/minio:latest --format {{.Config.Healthcheck}}),因此我们需要在开始运行之前设置--health-cmdjobs.<job_id>.services.<service_id>.options命中服务livenessProbe端点以确保服务正在运行jobs.<job_id>.steps
  2. 我在按名称连接到服务时遇到了一些问题,因此我将端点设置minio为,GitHub Actions 在Kuberneteslocahost:9000中运行,它们共享相同的网络命名空间,并且可以通过 Podlocalhost
  3. 访问和中的加密秘密jobs.<job_id>.services.<service_id>.envjobs.<job_id>.steps.<step_id>.run
  4. minio使用github上下文挂载本地目录作为支持服务的卷workspace

GitHub Actions minio 服务

  • MinIO 仅为此目的发布了一个容器 `minio/minio:edge-cicd` - https://hub.docker.com/layers/minio/minio/edge-cicd/images/sha256-29e8e51691d11e779468f275002779b221fd3902518d103e35c8a8bb2ef0f3ea?context=explore (2认同)

aha*_*ini 3

该错误是抱怨--entrypoint "minio server /data",而不是配置volumes。它似乎是在寻找一个名为的文件,minio server /data而不是在 shell 中执行命令。这是标志如何工作的一个很好的解释--entrypoint,原因是因为--entrypoint需要一个文件(二进制文件或脚本)来执行,而不是带有参数的命令来运行。正如这里所看到的,这似乎很难克服。

我想到的唯一建议是使用minio/minio中设置的参数在 Docker 映像之上构建Dockerfile并将其上传到 DockerHub,以便您可以使用它作为image替代。

以下是您可以使用的示例Dockerfile

FROM minio/minio
ENTRYPOINT ["/usr/bin/docker-entrypoint.sh", "minio", "server", "/data"]
Run Code Online (Sandbox Code Playgroud)