在 Windows 10 中使用 docker-compose 时,不会在 Scylla 中创建卷

Volume isn't created in Scylla when using docker-compose in Windows 10

我刚开始学习 Docker 和 docker-compose,我想尝试一下 ScyllaDB(数据库)。我想在 Docker 中启动一个 ScyllaDB 实例,通过 docker-compose 与持久存储。持久存储应该保存在 'target' 文件夹中,相对于我的 docker-compose 文件。问题是我没有看到正在创建任何文件夹,但 docker-compose 似乎保留了数据,但我不确定在哪里可以找到 ScyllaDB 创建的文件。逐步复制路径:

  1. 创建一个docker-compose.yml,内容如下(/var/lib/scylla根据https://docs.scylladb.com/operating-scylla/procedures/tips/best_practices_scylla_on_docker/应该是正确的):

docker-compose.yml

version: '3'

services:
  b-scylla:
    image: "scylladb/scylla:4.3.1"
    container_name: b-scylla
    volumes:
      - ./target:/var/lib/scylla
    ports:
      - "127.0.0.1:9042:9042"
      - "127.0.0.1:9160:9160"
  1. 这没有给出任何结果:$ docker volume ls
  2. 启动 docker-compose 等待 ScyllaDB 启动:$ docker-compose up -d
  3. 这仍然没有给出任何结果:$ docker volume ls。我希望 Docker 应该创建一个卷 (./target/)。
  4. 在 ScyllaDB 中保存一些数据以验证数据是否保存在某处:

运行 以下命令:

$ docker exec -it b-scylla cqlsh
$ create keyspace somekeyspace with replication = {
    'class': 'NetworkTopologyStrategy',
    'replication_factor': 2
};
  1. 创建的键空间保存在某个地方,但我不知道在哪里。我希望它只是在目标文件夹中,但甚至没有创建该文件夹。当我重新启动 docker-compose 时,键空间仍然存在,所以数据保存在某处,但是在哪里?

原来我需要在 Docker 桌面

中重置我的凭据

您正在使用创建挂载点 绑定 的数据挂载 (https://docs.docker.com/compose/compose-file/compose-file-v3/#short-syntax-3) 的“短语法”。绑定不是卷。不能用 docker volume ls 检查它们。您可以通过 docker inspect {container}.

了解您的坐骑

但是,Scylla 映像无法通过绑定安装正确启动。我看到在挂载目录中写入 sstables 时不断出现文件系统错误:

version: '3'

services:
  b-scylla:
    image: "scylladb/scylla:4.3.1"
    container_name: b-scylla
    volumes:
      - ./target:/var/lib/scylla
$  docker compose up -f .\test.yaml
b-scylla    | INFO  2021-03-04 07:24:53,132 [shard 0] init - initializing batchlog manager
b-scylla    | INFO  2021-03-04 07:24:53,135 [shard 0] legacy_schema_migrator - Moving 0 keyspaces from legacy schema tables to the new schema keyspace (system_schema)
b-scylla    | INFO  2021-03-04 07:24:53,136 [shard 0] legacy_schema_migrator - Dropping legacy schema tables
b-scylla    | ERROR 2021-03-04 07:24:53,168 [shard 0] table - failed to write sstable /var/lib/scylla/data/system/truncated-38c19fd0fb863310a4b70d0cc66628aa/mc-8-big-Data.db: std::system_error (error system:2, No such file or directory)

我没有找出是什么原因造成的,但该目录是可写的并且包含大部分正常的初始数据 - 保留的提交日志段和系统 ks 数据文件夹。

真正有效的是使用卷:

version: '3'

services:
  b-scylla:
    image: "scylladb/scylla:4.3.1"
    container_name: b-scylla
    volumes:
      - type: volume
        source: target
        target: /var/lib/scylla
        volume:
          nocopy: true
          
volumes:
  target:
$  docker compose up -f .\test.yaml
$ docker volume ls
DRIVER    VOLUME NAME
local     6b57922b3380d61b960110dacf8d180e663b1ce120494d7a005fc08cee475234
local     ad220954e311ea4503eb3179de0d1162d2e75b73d1d9582605b4e5c0da37502d
local     projects_target

$ docker volume inspect projects_target
[
    {
        "CreatedAt": "2021-03-04T07:20:40Z",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "projects",
            "com.docker.compose.version": "1.0-alpha",
            "com.docker.compose.volume": "target"
        },
        "Mountpoint": "/var/lib/docker/volumes/projects_target/_data",
        "Name": "projects_target",
        "Options": null,
        "Scope": "local"
    }
]

Scylla 在此模式下成功启动。

您当然可以将此卷安装到任何其他容器:

$ docker run -it --mount source=projects_target,target=/app --entrypoint bash scylladb/scylla:4.3.1

或通过 WSL 访问它 ():

$ \wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\projects_target\_data