登录
首页 >  Golang >  Go问答

GO 代码中如何将 ArangoDB 与测试容器分离?

来源:stackoverflow

时间:2024-02-07 19:33:23 248浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《GO 代码中如何将 ArangoDB 与测试容器分离?》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

我正在尝试使用 https://golang.testcontainers.org 从我指定的映像设置一个 docker 容器,同时代码正在执行。旋转出来的容器将在程序终止之前被清理,如上面的链接所述。

这是我必须设置“arangocontainerrequest”的代码:

arangocontainerrequest := testcontainers.containerrequest{
    image:        "arangodb/arangodb:3.7.5",
    name:         "arango",
    exposedports: []string{"8529/tcp"},
    env: map[string]string{
        // what config details to specify?
    },
    waitingfor: wait.forlog("waiting for connections").withstartuptimeout(time.minute * 15),
}

这是我必须启动容器并推迟其终止的代码:

arangoContainer, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
    ContainerRequest: arangoContainerRequest,
    Started:          true,
})
defer arangoContainer.Terminate(ctx)

完成这些后,我会收到一条超时消息,指出“超出了上下文截止日期”,容器甚至在没有创建的情况下就超时了。

也许对于“arangocontainerrequest”映射中“env”字段的某些配置值,容器可以动态旋转(这样容器可能不会太大),但我无法弄清楚一样。

任何形式的帮助将不胜感激。


正确答案


我会考虑查看 arangodb 的官方文档,即它的 docker hub 页面:https://hub.docker.com/_/arangodb

我认为这个代码片段将帮助您设置容器,因为它对我有用。

    ctx := context.Background()

    networkName := "backend"

    newNetwork, err := testcontainers.GenericNetwork(ctx, testcontainers.GenericNetworkRequest{
        NetworkRequest: testcontainers.NetworkRequest{
            Name:           networkName,
            CheckDuplicate: true,
        },
    })
    if err != nil {
        t.Fatal(err)
    }
    t.Cleanup(func() {
        require.NoError(t, newNetwork.Remove(ctx))
    })

    arangodb, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
        ContainerRequest: testcontainers.ContainerRequest{
            Image: "arangodb/arangodb:latest",
            Env: map[string]string{
                "ARANGODB_USERNAME":    "myuser",
                "ARANGODB_PASSWORD":    "mypassword",
                "ARANGODB_DBNAME":      "graphdb",
                "ARANGO_ROOT_PASSWORD": "myrootpassword",
            },
            Networks: []string{networkName},
            Resources: container.Resources{
                Memory: 256 * 1024 * 1024, // 512 MB
            },
            WaitingFor: wait.ForLog("is ready for business").WithStartupTimeout(time.Minute * 1),
        },
        Started: true,
    })
    require.NoError(t, err)
    defer arangodb.Terminate(ctx)

今天关于《GO 代码中如何将 ArangoDB 与测试容器分离?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>