0

我在 docker 中有一些代码轮询目录以对其执行一些操作。该目录在运行 docker 时使用 -v 选项传递,还使用了一些设备,例如--device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl

在 wsk docker 操作中,我看到要创建 docker 操作,我使用如下命令 wsk -i action create --docker

我想了解如何将音量和设备信息传递给 docker,因为该 docker 的启动和停止将由 openwhisk 维护。或者是否有其他解决方法

4

2 回答 2

1

OpenWhisk 不支持运行带有附加卷的基于​​ Docker 的操作。用户对存储设备没有任何控制权。

解决方法是使用对象存储作为存储位置。然后,OpenWhisk 操作可以使用 API 从无服务器运行时查询、检索和修改数据。

于 2017-06-15T10:57:22.133 回答
0

老问题,但我留下一个注释,对于本地测试部署,我使用已安装的 NFS 网络文件系统和本地路径运行 OpenWhisk。为此,我只是简单地将挂载添加到源中(硬编码,接下来可以进行 ENV 设置):

在此处添加卷挂载 -v:文件:core/invoker/src/main/scala/whisk/core/containerpool/docker/DockerContainer.scala

    val args = Seq(
    "--cpu-shares",
    cpuShares.toString,
    "--memory",
    s"${memory.toMB}m",
    "--memory-swap",
    s"${memory.toMB}m",
    "--network",
    network,
    "-v",
    "/mnt/nfs:/mnt/nfs",
    "-v",
    "/mnt/data:/mnt/data") ++
    environmentArgs ++
    dnsServers.flatMap(d => Seq("--dns", d)) ++
    name.map(n => Seq("--name", n)).getOrElse(Seq.empty) ++
    params

要构建它,然后在 openwhisk-master 目录中运行:

./gradlew distdocker 

并标记生成的调用程序容器,以便在堆栈中使用它:

docker tag whisk/invoker openwhisk/invoker

重新启动后,您就有了卷。

但请注意:这与无状态微服务的设计原则相矛盾,可能不是最明智的方法。重新检查是否可以不安装卷(它们不是无状态的)。

于 2018-03-21T16:02:02.343 回答