如何使用 Github Actions 创建启用副本集的 mongo 服务

Jon*_*Bro 5 github mongodb docker

我想利用 Github Action并使用它来创建具有副本集service支持的 mongo 实例。这就是我现在所拥有的。

      mongo:
        image: mongo:5.0.3
        volumes:
          - /d/test-db.d
        ports:
          - 27017:27017 
        options: >-
          --entrypoint /usr/bin/docker run --name mongo_container --replSet test --bind_ip_all
          --health-cmd "bash -c \"if [ $(mongo mongo_container --quiet --eval 'rs.initiate().ok || rs.status().ok') -eq 1 ]; then exit 1; else exit 0; fi\""
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
          --name test
Run Code Online (Sandbox Code Playgroud)

但是,'denied: requested access to the resource is denied'当我尝试docker run作为入口点调用时,github actions 给我一个错误。我想我不允许直接运行 docker run 。

我还尝试在选项数组中设置--replSet testand --bind_ip_all,但它无法识别并抛出错误。

我在文档中没有看到任何有关副本集的内容。它们甚至作为服务得到支持吗?

Sel*_*jwa 0

GH 讨论来看,似乎不可能用参数覆盖入口点。如果您能够放弃服务容器,则可以通过多种方式解决您的问题。

1. 使用增压

它提供了一种快速而简单的方法来设置副本集并使用环境变量对其进行一定程度的自定义。这种方法的主要缺点(可能与您相关,也可能不相关)是您将无法服务容器连接到副本集,因为 Supercharge仅侦听localhost. 如果您不需要从服务容器进行连接并且对额外的依赖项感到满意,那么 Supercharge 将非常有用。

2.Docker运行

如果您出于某种原因无法使用 Supercharge 或者希望对配置进行更多控制,您可以docker run在一个步骤中使用以下命令轻松启动单节点副本集:

# ...some config omitted 
- name: Start mongo
    run:  docker run -d -p 27017:27017 --name mongo  mongo:6.0 --replSet test --bind_ip_all

  - name: Initialize MongoDB Replica Set
    run: |
      sleep 10
      docker run --rm mongo:6.0 mongosh --host 172.17.0.1 --eval 'rs.initiate({_id: "test", members: [{_id: 0, host: "172.17.0.1:27017"}]})'
# more steps
Run Code Online (Sandbox Code Playgroud)

使用此选项,您不仅可以使用localhost主机运行程序连接到副本集,还可以使用 Docker 桥接网关地址从其他服务容器连接172.17.0.1