2017-07-26 9 views
0

RYUコントローラのドッカーコンテナをcloudifyの方法で実行したいと思います。関連するデプロイメントを作成し、最終的にドッカーコンテナを開始するための青写真ファイルを作成しました。dockerコンテナでコマンドを自動的に実行するための青写真をcloudulateで編集する方法

問題は、コントローラ(ドッキング・コンテナ内)が機能するスクリプトを実装する必要がありますが、スクリプトを自動的に実行するための青写真ファイルを変更する方法がわかりません。毎回、目標のために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 ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ 

しかし、予期しないパラメータのエラーを受け取りました。

お時間をありがとうと任意の意見は〜


またはdocker execと一致するcloudify青写真でどの部分、誰もが知っているなら、私は、このように入れましょうをいただければ幸いですか!

答えて

1

Cloudifyをたくさん使用しています。 Docker Pluginは「持っているのがいい」のですが、実際には必要ありません。 Cloudscape Scriptプラグインの中から「docker exec」や「docker run」のようなコマンドを実行しても同じ結果が得られ、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

scripts/start。sh

docker exec -it ryu ryu-manager /ryu/ryu/app/simple_switch.py

+0

うわー!これはクールでシンプルに聞こえるよ!私は公式プラグインを使うことが必須だと思った。どうもありがとう!私は試してみるよ。 – Lootii

+0

それはあなたが思いついたようにうまく動作します!しかし、旗は疑問の余地がないかもしれません。コンテナは 'run -d'によって実行を続行できず、' -t'は '入力デバイスはtty'エラーではありません。とにかく、解決策は本当に大きな助けになります。再度、感謝します! – Lootii

+0

こんにちは、@土星!もう1つ質問できますか?ドッカーコンテナはスクリプトによって実行されるので、コンテナの状態は単にスクリプトの結果に過ぎないのでしょうか?つまり、コンテナは実際にはクラウディングノードとは何の関係もありません。 (私は自分自身が他の手段でコンテナに影響を与えることができないことを発見しました...) – Lootii

0

私が答えを出す前に、私は雲解けの経験はありませんが、ドキュメントを見て、それが何であるかを見てきました。ここに私の指針があります。

https://github.com/cloudify-cosmo/cloudify-docker-plugin/blob/master/docker_plugin/tasks.py

URL

以下に私がドッキングウィンドウプラグインを見てまず第一にそしてそれはいずれかのような文を実行していません。したがって、作成および開始ライフサイクルの両方から commandを削除する必要があります。そうすることで、デフォルトのイメージコマンドが確実に実行されます。

これで、コンテナ内で追加のコマンドを実行することができます。ドッカープラグインはその操作をサポートしていないので、新しく作成したコンテナのコンテナIDを取得するのが最善です。これは、いくつかの出力パラメータのキャプチャを使用して可能になるはずです

これで、ローカルマシンまたはドッカーがインストールされているリモートマシンでコマンドを実行します。これは、作成したコンテナからIDを取得し、そのメインドッカーホストでdocker exec <ID> ryu-manager /ryu/ryu/app/simple_switch.pyコマンドを実行する別のライフサイクルとして設定できます。

+0

ありがとう、タルン、答えにあなたの特別な努力のために!私は[このドッカープラグイン](https://github.com/docker/docker-py/blob/master/docker/api/container.py)をお勧めします。これは、より多くの)。 – Lootii

+0

私は 'run'ライフサイクルを追加しようとしました。 [docker plugin](http://docs.getcloudify.org/4.0.0/plugins/docker/#create)は 'create'、' start'、 'stop'、' remove_container'しかサポートしていないようだから、新しい変化は妥当ではない。 – Lootii

関連する問題