我想以cloudify方式运行RYU控制器的docker容器。我编写了一个蓝图文件,我可以用它来创建相关的部署,最后启动docker容器。
问题是,控制器(在docker容器内)需要实现一个脚本来运行,但我不知道如何修改蓝图文件以自动运行脚本。每次,我都必须输入docker exec CONTAINER ryu-manager /path/simple_switch.py
作为目标。
所以有人都知道命令应放在蓝图中的哪个位置。我试图把它包含在
中interfaces:
cloudify.interfaces.lifecycle:
create:
implementation: docker.docker_plugin.tasks.create_container
inputs:
params:
ports:
- { get_input: docker_port }
stdin_open: true
tty: true
command: /bin/bash
start:
implementation: docker.docker_plugin.tasks.start
inputs:
params:
port_bindings: { get_input: container_port_binding }
command: docker exec ryu ryu-manager /ryu/ryu/app/simple_switch.py
# here ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
但收到意外参数错误。
感谢您的时间,任何意见将不胜感激〜
或者让我这样说,如果有人知道,cloudify蓝图中的哪一部分与docker exec
匹配?
答案 0 :(得分:1)
我经常使用Cloudify,而且我经常使用Docker。 Docker插件很容易拥有"但它确实没有必要。您可以运行像" docker exec"这样的命令。和#34;码头运行"从Cloudify脚本插件内部得到相同的结果,你不需要找出一个不同的界面来使用Docker。
例如,如果我有这个cloudify蓝图(简化):
yaml
node_templates:
my_app:
type: cloudify.nodes.SoftwareComponent
interfaces:
cloudify.interfaces.lifecycle:
create:
implementation: scripts/create.sh
start:
implementation: scripts/start.sh
relationships:
- type: cloudify.relationships.depends_on
target: vm
我可以调用这样的脚本:
脚本/ create.sh:
docker run -d ryu
脚本/ start.sh
docker exec -it ryu ryu-manager /ryu/ryu/app/simple_switch.py
答案 1 :(得分:0)
在我回答之前,我没有cloudify的经验,但我查看了文档以了解它的全部内容。以下是我对你的提示。
首先,我查看了URL下面的docker插件
https://github.com/cloudify-cosmo/cloudify-docker-plugin/blob/master/docker_plugin/tasks.py
它没有任何执行声明。因此,您应该从创建和开始生命周期中删除command
。这样做可以确保默认图像命令运行。
现在您的任务是在容器内执行其他命令。由于docker插件不支持该操作,因此最好的办法是获取新创建的容器的容器ID。这应该可以使用一些输出参数捕获
现在,您要在本地计算机或安装了docker的远程计算机上执行命令。这可以设置为另一个生命周期,它从创建的容器中获取ID并在该主docker主机上执行docker exec <ID> ryu-manager /ryu/ryu/app/simple_switch.py
命令