Nomad: Dockerドライバーのインタラクティブジョブ

作成日 2017年12月28日  ·  3コメント  ·  ソース: hashicorp/nomad

みなさん、こんにちは。これがこの種のものに適した場所であることを願っています。 nomadのdockerドライバーがインタラクティブなジョブをサポートしているようには見えません。 私たちのユースケースは、オペレーターコンテナーを起動することです(私たちはレールショップなので、製品前の環境でrails consoleしてコンテナーを起動できると特に便利です)。 基本的に、 docker run --rm -it相当する遊牧民を探しています。

これは将来のリリースで検討されているものですか? かなり醜い回避策をいくつか考えることができますが、それがオプションである場合は、ファーストパーティのものを使用することをお勧めします。 :)

themdrivedocker typquestion

最も参考になるコメント

いつかリモート実行をNomadに直接追加する可能性がありますが、現在、 nomad run some.job実行するときにリモートクライアントのインタラクティブセッションに接続する方法はありません。

それまでの間、ジョブを実行しているクライアントでdocker exec -it ${CONTAINER_NAME} /bin/shを使用する必要があります。 コンテナの名前は${TASK_NAME}-${ALLOC_ID}なので、bash + curl + jqを使用してスクリプトを作成できる場合があります。

# Example alloc
taskname="redis"
allocid="1f54361f-e371-efd0-6f54-803614c719f8"

nodeid="$(curl -s localhost:4646/v1/allocation/$allocid | jq -r .NodeID)"
nodeip=$(curl -s localhost:4646/v1/node/$nodeid | jq -r '.Attributes."unique.network.ip-address"')
ssh $nodeip docker exec -it "$taskname-$allocid" /bin/sh

とりあえず締めくくりますが、うまくいかない場合や何か問題が発生した場合は、コメントして再開してください。

全てのコメント3件

いつかリモート実行をNomadに直接追加する可能性がありますが、現在、 nomad run some.job実行するときにリモートクライアントのインタラクティブセッションに接続する方法はありません。

それまでの間、ジョブを実行しているクライアントでdocker exec -it ${CONTAINER_NAME} /bin/shを使用する必要があります。 コンテナの名前は${TASK_NAME}-${ALLOC_ID}なので、bash + curl + jqを使用してスクリプトを作成できる場合があります。

# Example alloc
taskname="redis"
allocid="1f54361f-e371-efd0-6f54-803614c719f8"

nodeid="$(curl -s localhost:4646/v1/allocation/$allocid | jq -r .NodeID)"
nodeip=$(curl -s localhost:4646/v1/node/$nodeid | jq -r '.Attributes."unique.network.ip-address"')
ssh $nodeip docker exec -it "$taskname-$allocid" /bin/sh

とりあえず締めくくりますが、うまくいかない場合や何か問題が発生した場合は、コメントして再開してください。

ありがとう! それまでの間、これは十分に役立つ回避策です。 👍

別の代替手段として、ウィーブスコープが適しています。 Web UIからコンテナーに実行できることに加えて、コンテナー間のネットワーク接続の大部分がほぼリアルタイムで表示されます。 クラスター内のすべてのホストで実行されます。

Weave Netなしで実行できますが、他のすべてのホストの場所を指定する必要があります(全員が1つのホストに接続するとクラスター化する可能性がありますが、確認していません)。 WeaveWorksのGuysは、スクリプトを起動するbashスクリプトを提供していますが、スクリプトなしでNomadジョブとして実行したり、Ansibleから実行したりできます。

---
- name: Start Weave.Scope
  docker_container:
    name: weavescope
    image: weaveworks/scope
    privileged: yes
    network_mode: host
    pid_mode: host
    entrypoint: "/home/weave/entrypoint.sh --probe.docker=true {{ cluster_with | join(' ') }}"
    published_ports:
      - 4040:4040
    restart_policy: always
    volumes:
      - /var/run/scope/plugins:/var/run/scope/plugins
      - /sys/kernel/debug:/sys/kernel/debug
      - /var/run/docker.sock:/var/run/docker.sock
このページは役に立ちましたか?
0 / 5 - 0 評価