在Windows上使用Docker Compose with Scylla时,无法初始化目录(存储I/O错误:22:参数无效)

在Windows上使用Docker Compose with Scylla时,无法初始化目录(存储I/O错误:22:参数无效),docker,docker-compose,scylla,Docker,Docker Compose,Scylla,我在docker compose中运行Scylla实例时遇到问题。我使用的是windows 10,这是我在运行$docker logs b-scylla时遇到的错误: INFO 2021-03-03 20:28:33,030 [shard 0] storage_service - Stop transport: starts INFO 2021-03-03 20:28:33,030 [shard 0] storage_service - Stop transport: shutdown rp

我在docker compose中运行Scylla实例时遇到问题。我使用的是windows 10,这是我在运行
$docker logs b-scylla
时遇到的错误:

INFO  2021-03-03 20:28:33,030 [shard 0] storage_service - Stop transport: starts
INFO  2021-03-03 20:28:33,030 [shard 0] storage_service - Stop transport: shutdown rpc and cql server done
INFO  2021-03-03 20:28:33,030 [shard 0] gossip - gossip is already stopped
INFO  2021-03-03 20:28:33,030 [shard 0] storage_service - Stop transport: stop_gossiping done
ERROR 2021-03-03 20:28:33,030 [shard 0] init - Directory '"/var/lib/scylla/commitlog"' cannot be initialized. Tried to do it but failed with: storage_io_error (Storage I/O error: 22: Invalid argument)
ERROR 2021-03-03 20:28:33,030 [shard 0] init - Directory '"/var/lib/scylla/data"' cannot be initialized. Tried to do it but failed with: storage_io_error (Storage I/O error: 22: Invalid argument)
ERROR 2021-03-03 20:28:33,030 [shard 0] init - Directory '"/var/lib/scylla/hints/0"' cannot be initialized. Tried to do it but failed with: storage_io_error (Storage I/O error: 22: Invalid argument)
ERROR 2021-03-03 20:28:33,030 [shard 0] init - Directory '"/var/lib/scylla/hints/1"' cannot be initialized. Tried to do it but failed with: storage_io_error (Storage I/O error: 22: Invalid argument)
ERROR 2021-03-03 20:28:33,030 [shard 0] init - Directory '"/var/lib/scylla/hints/2"' cannot be initialized. Tried to do it but failed with: storage_io_error (Storage I/O error: 22: Invalid argument)
ERROR 2021-03-03 20:28:33,030 [shard 0] init - Directory '"/var/lib/scylla/hints/3"' cannot be initialized. Tried to do it but failed with: storage_io_error (Storage I/O error: 22: Invalid argument)
ERROR 2021-03-03 20:28:33,030 [shard 0] init - Directory '"/var/lib/scylla/view_hints/0"' cannot be initialized. Tried to do it but failed with: storage_io_error (Storage I/O error: 22: Invalid argument)
ERROR 2021-03-03 20:28:33,031 [shard 0] init - Directory '"/var/lib/scylla/view_hints/1"' cannot be initialized. Tried to do it but failed with: storage_io_error (Storage I/O error: 22: Invalid argument)
ERROR 2021-03-03 20:28:33,031 [shard 0] init - Directory '"/var/lib/scylla/view_hints/2"' cannot be initialized. Tried to do it but failed with: storage_io_error (Storage I/O error: 22: Invalid argument)
ERROR 2021-03-03 20:28:33,031 [shard 0] init - Directory '"/var/lib/scylla/view_hints/3"' cannot be initialized. Tried to do it but failed with: storage_io_error (Storage I/O error: 22: Invalid argument)
INFO  2021-03-03 20:28:33,031 [shard 0] init - Shutting down database
INFO  2021-03-03 20:28:33,031 [shard 0] storage_service - messaging_service stopped
INFO  2021-03-03 20:28:33,031 [shard 0] storage_service - Stop transport: shutdown messaging_service done
INFO  2021-03-03 20:28:33,031 [shard 0] storage_service - stream_manager stopped
INFO  2021-03-03 20:28:33,031 [shard 0] storage_service - Stop transport: shutdown stream_manager done
INFO  2021-03-03 20:28:33,031 [shard 0] storage_service - Stop transport: done
INFO  2021-03-03 20:28:33,032 [shard 0] init - Shutting down database was successful
奇怪的是,我看到dir实际上是在我的本地机器上创建的(我有一个卷):

这是我的docker-compose.yml:

version: '3'

services:
  b-scylla:
    image: scylladb/scylla:4.3.1
    container_name: b-scylla
    volumes:
      - ./scylla:/var/lib/scylla
      - ./:/project
    ports:
      - 127.0.0.1:9042:9042
      - 127.0.0.1:9160:9160
COMPOSE_CONVERT_WINDOWS_PATHS=1
我用绝对路径替换了“/scylla/”,但结果没有改变。我的.env文件中有这个文件,与docker-compose.yml位于同一文件夹中:

version: '3'

services:
  b-scylla:
    image: scylladb/scylla:4.3.1
    container_name: b-scylla
    volumes:
      - ./scylla:/var/lib/scylla
      - ./:/project
    ports:
      - 127.0.0.1:9042:9042
      - 127.0.0.1:9160:9160
COMPOSE_CONVERT_WINDOWS_PATHS=1
请参阅我的解决方案

这将对您有用:

version: '3'

services:
  scylla:
    image: "scylladb/scylla:4.3.1"
    container_name: scylla
    volumes:
      - type: volume
        source: target
        target: /var/lib/scylla
        volume:
          nocopy: true
          
volumes:
  target:
通过以下方式访问数据:

$ docker run -it --mount source=projects_target,target=/app --entrypoint bash scylladb/scylla:4.3.1
或者通过WSL():

请参阅我的解决方案

这将对您有用:

version: '3'

services:
  scylla:
    image: "scylladb/scylla:4.3.1"
    container_name: scylla
    volumes:
      - type: volume
        source: target
        target: /var/lib/scylla
        volume:
          nocopy: true
          
volumes:
  target:
通过以下方式访问数据:

$ docker run -it --mount source=projects_target,target=/app --entrypoint bash scylladb/scylla:4.3.1
或者通过WSL():


当我将版本更改为“3.2”(3给了我一个错误)时,它就可以工作了。最后一个问题,你为什么习惯于反对争论?我在没有参数的情况下尝试了它,但仍然有效。@NoKey,
nocopy
只是在创建卷时忽略容器中装载路径上存在的数据。它不是严格要求使规范工作。当我将版本更改为“3.2”(3给了我一个错误)时,它就工作了。最后一个问题,你为什么习惯于反对争论?我在没有参数的情况下尝试了它,但仍然有效。@NoKey,
nocopy
只是在创建卷时忽略容器中装载路径上存在的数据。没有严格要求规范起作用。