返回顶部
首页 > 资讯 > 后端开发 > GO >启动 clickhouse 容器的 testcontainers 使用方法
  • 744
分享到

启动 clickhouse 容器的 testcontainers 使用方法

2024-04-04 23:04:18 744人浏览 安东尼
摘要

编程网今天将给大家带来《启动 clickhouse 容器的 testcontainers 使用方法》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习golang或者已经是

编程网今天将给大家带来《启动 clickhouse 容器的 testcontainers 使用方法》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

我想使用 testcontainers 进行集成测试。我需要针对 clickhouse 存储进行测试。

Docker 镜像是 yandex/clichouse-server

到目前为止我的代码(主要从 testcontainers 网站上的官方 Redis 示例导入):

ctx := context.Background()
    req := testcontainers.ContainerRequest{
        Image: "yandex/clickhouse-server",
        ExposedPorts: []string{"9000/tcp"},
    }
    chContainer, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
        ContainerRequest: req,
        Started:          true,
    })
    require.NoError(t, err, "unexpected error while creating clickhouse container")

    endpoint, err := chContainer.Endpoint(ctx, "")
    require.NoError(t, err)

这会在获取端点时引发错误 port not found,并且我不确定从那里去哪里。


正确答案


您是否尝试过在 testcontainers Go 中使用等待 apihttps://GitHub.com/testcontainers/testcontainers-go/tree/main/wait

有了它们,您将能够等待多件事(甚至是同时等待):

  • 日志条目
  • 准备好端口
  • sql 查询
  • Http 请求
  • 在容器中运行程序后的退出代码

您可以在存储库中找到有用的示例。即日志条目的示例:

ctx := context.background()
    req := containerrequest{
        image:        "docker.io/Mysql:latest",
        exposedports: []string{"3306/tcp", "33060/tcp"},
        env: map[string]string{
            "mysql_root_passWord": "password",
            "mysql_database":      "database",
        },
        waitingfor: wait.forlog("test context timeout").withstartuptimeout(1 * time.second),
    }
    _, err := genericcontainer(ctx, genericcontainerrequest{
        providertype:     providertype,
        containerrequest: req,
        started:          true,
    })

编辑:一个更详细的示例,包括使用 http 请求的等待策略:

const (
        dbname       = "crazy"
        fakeuser     = "jondoe"
        fakepassword = "bond girl"
    )

    ctx := context.background()

    req := containerrequest{
        image: "clickhouse/clickhouse-server",
        env: map[string]string{
            "clickhouse_db":       dbname,
            "clickhouse_user":     fakeuser,
            "clickhouse_password": fakepassword,
        },
        exposedports: []string{
            "8123/tcp",
            "9000/tcp",
        },
        waitingfor: wait.forall(
            wait.forhttp("/ping").withport("8123/tcp").withstatuscodematcher(
                func(status int) bool {
                    return status == http.statusok
                },
            ),
        ),
    }

    clickhousecontainer, err := genericcontainer(ctx, genericcontainerrequest{
        containerrequest: req,
        started:          true,
    })
    if err != nil {
        t.fatal(err)
    }

    defer clickhousecontainer.terminate(ctx)

仅供参考,从 v0.23.0 开始,有一个用于 testcontainers-go 的 clickhouse 模块:https://golang.testcontainers.org/modules/clickhouse/

您可以通过非常简单的方式使用它:

添加依赖项:

go get github.com/testcontainers/testcontainers-go/modules/clickhouse

导入:

import "github.com/testcontainers/testcontainers-go/modules/clickhouse"

代码:

ctx := context.Background()

user := "clickhouse"
password := "password"
dbname := "testdb"

clickHouseContainer, err := clickhouse.RunContainer(ctx,
    testcontainers.WithImage("clickhouse/clickhouse-server:23.3.8.21-alpine"),
    clickhouse.WithUsername(user),
    clickhouse.WithPassword(password),
    clickhouse.WithDatabase(dbname),
    clickhouse.WithInitScripts(filepath.Join("testdata", "init-db.sh")),
    clickhouse.WithConfigFile(filepath.Join("testdata", "config.xml")),
)
if err != nil {
    panic(err)
}
defer func() {
    if err := clickHouseContainer.Terminate(ctx); err != nil {
        panic(err)
    }
}()

本篇关于《启动 clickhouse 容器的 testcontainers 使用方法》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注编程网公众号!

您可能感兴趣的文档:

--结束END--

本文标题: 启动 clickhouse 容器的 testcontainers 使用方法

本文链接: https://lsjlt.com/news/595749.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 启动 clickhouse 容器的 testcontainers 使用方法
    编程网今天将给大家带来《启动 clickhouse 容器的 testcontainers 使用方法》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是...
    99+
    2024-04-04
  • 使用Dockerfile实现容器内部服务随容器自启动的方法
    目录1 Docker下载python2 搭建flask服务2.1 创建flask脚本2.2 创建gunicorn启动脚本3 制作镜像3.1 将mypython容器制作成镜像3.2 D...
    99+
    2024-04-02
  • docker无法启动容器的方法有哪些
    检查容器状态:使用命令docker ps -a查看所有容器的状态,找出无法启动的容器,了解具体的错误信息。 检查日志:使用命...
    99+
    2024-04-02
  • Docker容器创建、启动和停止的方法
    本篇内容主要讲解“Docker容器创建、启动和停止的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker容器创建、启动和停止的方法”吧!1、容器是独立...
    99+
    2024-04-02
  • docker容器的启动与停止方法是什么
    Docker容器的启动与停止方法有以下几种:1. 使用docker run命令启动容器:使用docker run命令可以创建并启动一...
    99+
    2023-09-16
    docker
  • 使用ClickHouse JDBC官方驱动,踩坑无数
    前言 最近遇到一个ClickHouse的线上问题: Code: 242, e.displayText() = DB::Exception: Table is in readonly mode(zookeeper path:/clickhou...
    99+
    2023-08-17
    clickhouse java maven
  • RHEL7中使用systemctl启动mysql的方法
    本篇内容介绍了“RHEL7中使用systemctl启动mysql的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2024-04-02
  • docker启动容器的方式有哪些
    Docker启动容器的方式有以下几种:1. 使用`docker run`命令启动容器,例如:`docker run `。2. 使用`...
    99+
    2023-09-16
    docker
  • Docker容器的自启动
    docker的自启动通过sysv-rc-conf等管理启动脚本# docker.service#!/bin/shsudo systemctl enable dockersudo system...
    99+
    2023-06-05
  • Docker如何使用start命令启动容器
    小编给大家分享一下Docker如何使用start命令启动容器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用start命令启动...
    99+
    2024-04-02
  • angular如何使用bootstrap方法手动启动
    小编给大家分享一下angular如何使用bootstrap方法手动启动,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!要启动一个a...
    99+
    2024-04-02
  • C++ 容器 Vector 的使用方法
    目录Vector简介Vector 与数组创建 vector 的各种方法访问 vector 的元素删除元素前言: 我们都是带着问题学习,假设一个任务,也可以理解为一个问题,通过找解决方...
    99+
    2024-04-02
  • 使用run()方法怎么启动SpringBoot
    本篇文章给大家分享的是有关使用run()方法怎么启动SpringBoot,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。入口通常一个简单的SpringBoot基础项目我们会有如下...
    99+
    2023-06-14
  • Docker启动常用容器命令及配置方法是什么
    这篇文章主要介绍了Docker启动常用容器命令及配置方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Docker启动常用容器命令及配置方法是什么文章都会有所收获,下面我们一起来看看吧。Docker 容器...
    99+
    2023-07-05
  • docker start启动容器不报错,却无法正常启动
    问题描述:想启动 1e 这个容器 start后,没有报错,但是就是启动不了… 原因 查看一下日志 docker logs 1e1b85322dfa 好家伙,虽然它运行命令的时候不报错,但是它运行...
    99+
    2023-10-12
    mysql 数据库 java
  • spring容器启动实现初始化某个方法(init)
    spring容器启动 初始化某方法(init) 1、前言 很多时候,我们需要在项目启动的时候,就要完成某些方法的执行。今天整理了一个简单的方法,使用spring容器中bean的属性:...
    99+
    2024-04-02
  • 使用 Apache Superset 可视化 ClickHouse 数据的两种方法
    Apache Superset是一个强大的BI工具,它提供了查看和探索数据的方法。它在 ClickHouse 用户中也越来越受欢迎。 我们将介绍安装 Superset 的 2 种方法,然后展示如何从 Superset ...
    99+
    2022-06-04
    Apache Superset可视化ClickHouse Apache Superset可视化数据
  • 使用Iisftp.vbs启动FTP站点的方法教程
    这篇文章主要介绍“使用Iisftp.vbs启动FTP站点的方法教程”,在日常操作中,相信很多人在使用Iisftp.vbs启动FTP站点的方法教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”使用Iisftp....
    99+
    2023-06-08
  • springboot 项目容器启动后如何自动执行指定方法
    目录springboot 项目容器启动后自动执行指定springboot 容器及启动过程问题1:为什么要启动父子两个容器?问题2:在什么时候启动父容器?问题3:父容器和子容器的区别?...
    99+
    2024-04-02
  • mysql启动的方法
    mysql启动的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧! MySQL是最受欢迎的开源SQL数据库管理系...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作