如何将 docker 与音量和设备一起用作 Openwhisk 中的操作
How to use docker with volume and device as an action in the Openwhisk
我在 docker 中有一些代码可以轮询目录以对其执行一些操作。
此目录使用 -v 选项传递,而 运行 docker 也有一些设备使用 --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl
在 wsk docker 操作中,我看到要创建一个 docker 操作,我使用如下命令
wsk -i 动作创建 --docker
我想了解如何将音量和设备信息传递给 docker,因为此 docker 的启动和停止将由 openwhisk 维护。
或者是否有其他一些解决方法
OpenWhisk 不支持带有附加卷的基于 运行 Docker 的操作。用户对存储设备没有任何控制权。
解决方法是使用对象存储作为存储位置。然后,OpenWhisk 操作可以使用 API 从无服务器运行时查询、检索和修改数据。
老问题,但我留下了一个注释,对于本地测试部署,我有 OpenWhisk 运行 安装的 NFS 网络文件系统和本地路径。为此,我只是简单地将安装添加到源代码中(硬编码,可以进行 ENV 设置,下一步):
在此处添加 volume mounts -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
重启后,您就有了卷。
但请注意:这与无状态微服务的设计原则相矛盾,可能不是最明智的做法。 Re-check 如果你可以不安装卷(它们不是无状态的)。
我在 docker 中有一些代码可以轮询目录以对其执行一些操作。
此目录使用 -v 选项传递,而 运行 docker 也有一些设备使用 --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl
在 wsk docker 操作中,我看到要创建一个 docker 操作,我使用如下命令 wsk -i 动作创建 --docker
我想了解如何将音量和设备信息传递给 docker,因为此 docker 的启动和停止将由 openwhisk 维护。 或者是否有其他一些解决方法
OpenWhisk 不支持带有附加卷的基于 运行 Docker 的操作。用户对存储设备没有任何控制权。
解决方法是使用对象存储作为存储位置。然后,OpenWhisk 操作可以使用 API 从无服务器运行时查询、检索和修改数据。
老问题,但我留下了一个注释,对于本地测试部署,我有 OpenWhisk 运行 安装的 NFS 网络文件系统和本地路径。为此,我只是简单地将安装添加到源代码中(硬编码,可以进行 ENV 设置,下一步):
在此处添加 volume mounts -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
重启后,您就有了卷。
但请注意:这与无状态微服务的设计原则相矛盾,可能不是最明智的做法。 Re-check 如果你可以不安装卷(它们不是无状态的)。