在 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 创建的文件。逐步复制路径:
- 创建一个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"
- 这没有给出任何结果:
$ docker volume ls
- 启动 docker-compose 等待 ScyllaDB 启动:
$ docker-compose up -d
- 这仍然没有给出任何结果:
$ docker volume ls
。我希望 Docker 应该创建一个卷 (./target/)。
- 在 ScyllaDB 中保存一些数据以验证数据是否保存在某处:
运行 以下命令:
$ docker exec -it b-scylla cqlsh
$ create keyspace somekeyspace with replication = {
'class': 'NetworkTopologyStrategy',
'replication_factor': 2
};
- 创建的键空间保存在某个地方,但我不知道在哪里。我希望它只是在目标文件夹中,但甚至没有创建该文件夹。当我重新启动 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
我刚开始学习 Docker 和 docker-compose,我想尝试一下 ScyllaDB(数据库)。我想在 Docker 中启动一个 ScyllaDB 实例,通过 docker-compose 与持久存储。持久存储应该保存在 'target' 文件夹中,相对于我的 docker-compose 文件。问题是我没有看到正在创建任何文件夹,但 docker-compose 似乎保留了数据,但我不确定在哪里可以找到 ScyllaDB 创建的文件。逐步复制路径:
- 创建一个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"
- 这没有给出任何结果:
$ docker volume ls
- 启动 docker-compose 等待 ScyllaDB 启动:
$ docker-compose up -d
- 这仍然没有给出任何结果:
$ docker volume ls
。我希望 Docker 应该创建一个卷 (./target/)。 - 在 ScyllaDB 中保存一些数据以验证数据是否保存在某处:
运行 以下命令:
$ docker exec -it b-scylla cqlsh
$ create keyspace somekeyspace with replication = {
'class': 'NetworkTopologyStrategy',
'replication_factor': 2
};
- 创建的键空间保存在某个地方,但我不知道在哪里。我希望它只是在目标文件夹中,但甚至没有创建该文件夹。当我重新启动 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