docker - 如何在 Jelastic 环境中将数据卷挂载到添加的节点上
问题描述
我想创建一个带有负载均衡器和 cp 节点的 Jelastic 环境。我想用addNodes
api方法添加cp节点,因为它需要特定的数据才能启动。我的清单如下所示:
jpsVersion: 1.3
jpsType: install
application:
id: test-app
name: Test App
version: 0.0
env:
topology:
nodes:
- nodeGroup: bl
nodeType: nginx-dockerized
tag: 1.16.1
displayName: Node balancing
count: 1
fixedCloudlets: 1
cloudlets: 4
onInstall:
- addFile
- setup
actions:
addFile:
- cmd [bl]:
- mkdir /data
- echo "Hello world" > /data/test.txt
user: root
setup:
- addNodes:
- nodeGroup: cp
nodeType: docker
displayName: Test Mount
count: 1
fixedCloudlets: 1
cloudlets: 4
dockerName: alpine
volumeMounts:
/kickstart:
readOnly: true
sourcePath: /data
sourceNodeGroup: bl
dockerVolumes:
- /kickstart
出于某种原因,我希望为我的高山图像提供我存储在文件夹中的数据/kickstart
。当然,在那种情况下,这完全无关紧要。上面的例子只是简单到可以重现。在我的真实用例中,如果没有一些特定于应用程序的数据填充了用户输入时完成的清单设置,我想要挂载的 docker 映像将无法运行。这就是为什么有必要在添加 docker 节点时提供数据。
我的问题是上面的简单清单不起作用。事实上,在我的 docker 节点上,我无权访问/kickstart/test.txt
文件夹。我究竟做错了什么?
解决方案
volumeMounts
选项不可用于操作addNodes
这是一个如何实现它的示例:
type: install
name: Test App
nodes:
- nodeGroup: bl
nodeType: nginx
tag: 1.16.1
displayName: Node balancing
cloudlets: 4
- nodeGroup: cp
displayName: Test Mount
cloudlets: 4
image: alpine
startServiceOnCreation: false
volumes:
- /kickstart
volumeMounts:
/kickstart:
sourcePath: /data
sourceNodeGroup: bl
readOnly: true
onInstall:
- cmd [bl]: |-
echo "Hello world" > /data/test.txt
user: root
- env.control.ExecDockerRunCmd [${nodes.cp.join(id,)}]
你也可以使用不存在的目录volumeMounts
它会自己创造一切
推荐阅读
- c# - LINQ 中的复杂 SQL 连接(Normal 和 Lamba 格式)
- python - 在 Maya (PyQt5) 中显示 QTreeWidget 分支线?
- django - AWS Elastic Beanstalk 上的 Celery 配置问题 - “进程没有配置更新”
- javascript - @RequestBody 空值(Spring boot 和 Vue JS)
- html - 如何更改 HTML 表单上日期输入的样式和格式
- javascript - 使用 Async/Await 使 API 获取“POST”的正确方法
- sql-server - SQL Server 排名
- java - 单击 BottomSheet RecyclerView 时为空 ArrayList
- google-maps - 用于谷歌地图标记的 SVG 图标
- primefaces - 如何使用 Chart.js 限制 X 轴上的数据点数量