0

我正在尝试设置一个启动 cloud spanner 并对其进行初始化的 docker 容器。

使用 google 提供的这个官方 docker 镜像:gcr.io/cloud-spanner-emulator/emulator

我希望在启动时自动初始化扳手。

我用 docker 文件尝试了各种方法,总结一下:

FROM gcr.io/cloud-spanner-emulator/emulator

RUN some gcloud command after to initialize local spanner db

但是由于缺少有关此映像如何工作的信息,因此很难找到是否可以在每次容器启动时对其进行初始化。

我再说一遍,我需要在容器安装时自动运行它。它将建立管道。

有没有办法用这个提供的 docker 镜像来做到这一点?或者我应该创建自己的 dockerfile 来通过 gcloud cli 安装模拟器?

4

2 回答 2

3

这是一个 docker 文件示例,它允许启动 docker 模拟器并使用一些自定义 gcloud 命令进行初始化

FROM google/cloud-sdk:slim

RUN apt-get install -y google-cloud-sdk google-cloud-sdk-spanner-emulator

COPY ./start_spanner.bash start_spanner.bash
COPY ./schema.ddl schema.ddl

CMD ./start_spanner.bash

这是 file 的示例内容start_spanner.bash

#!/bin/bash

set -m

gcloud beta emulators spanner start --host-port=0.0.0.0:9010 &

# configure gcloud cli to connect to emulator
gcloud config set auth/disable_credentials true
gcloud config set project someproject
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/

# create spanner instance
gcloud spanner instances create someinstance \
  --config=emulator-config \
  --description="Test Instance" \
  --nodes=1

# create spanner database with the given schema
gcloud spanner databases create somedb \
 --instance=someinstance \
 --ddl-file=schema.ddl

fg %1

该文件schema.ddl只是您的 spanner ddl 运行以根据 spanner 的文档在模拟器中创建表。

于 2021-01-18T08:25:23.033 回答
1

如果我理解正确,您希望在 dockerfile 中启动 Spanner 模拟器。

您可以创建自己的 dockerfile 来构建模拟器。

请使用这些docker 命令

    docker pull gcr.io/cloud-spanner-emulator/emulator
    docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator

启动扳手模拟器。

编辑:

经过进一步澄清,目前正在尝试的似乎不是官方 Docker 映像“gcr.io/cloud-spanner-emulator/emulator”的可用功能。

没有文档说明如何使用官方 Spanner Emulator Docker 映像来运行初始化脚本,无论是GCP 文档还是Spanner 模拟器 README。例如,在启动时运行 gcloud 命令以创建 spanner 实例,上传 DDL 文件并使用该文件添加数据库。

OP 在评论中确定的解决方法似乎是目前最好的解决方案。

于 2020-11-25T21:59:10.390 回答