从 docker-compose 文件在 dockerized Clickhouse 实例中创建数据库和表

sma*_*kap 6 yandex docker docker-compose clickhouse

我的要求是当我使用 docker-compose 启动 Clickhouse 时在其中创建数据库和表。如果是mysql,我这样做:

mysql_1:
      image: mysql:5.7.16
      environment:
        MYSQL_DATABASE: "one"
        MYSQL_USER: "one_user"
        MYSQL_PASSWORD: "one_user_pass"
        MYSQL_ROOT_PASSWORD: "root"
        MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      volumes:
       - ./data/one:/docker-entrypoint-initdb.d
      ports:
        - "3306:3306"
Run Code Online (Sandbox Code Playgroud)

有什么方法可以为 Clickhouse 实例实现相同的效果吗?

sma*_*kap 5

我为此找到了一个不太干净的解决方案。它基本上是将主机目录安装到容器中并运行所有“创建表”和“插入”语句,只要我们不清理已安装的文件夹,就会持续存在!

clickhouse:
  image: yandex/clickhouse-server:18.10
  ports:
    - "8123:8123"
    - "9000:9000"
  volumes:
   - ./data/clickhouse/data:/var/lib/clickhouse
Run Code Online (Sandbox Code Playgroud)


小智 5

随着Add docker-entrypoint-initdb.d support #3695,Clickhouse-server 现在支持在服务器的 docker 镜像中运行初始化脚本。

例如,在 Dockerfile 中:

FROM clickhouse/clickhouse-server 
ADD  ./docker-entrypoint-initdb.d /docker-entrypoint-initdb.d
Run Code Online (Sandbox Code Playgroud)

添加您的 sql 文件docker-entrypoint-initdb.d并构建它。

当您从映像生成容器时,其中的所有脚本都docker-entrypoint-initdb.d将运行。

顺便说一句,除了问题之外,我在任何地方都找不到关于它的文档......

  • 这应该是公认的答案 (2认同)