Elaboration in, Garbage out

Twitt*r ではメモできない何かそれ的なモノ・コトを

JupyterHub/Swarm Mode で苦戦中

JupyterHub を Swarm Mode で動かしたいんだけれども、どうやら Swarm Mode は 1.12 以前の Swarm とは違い、外部からのコンテナ操作ができないみたいです。

forums.docker.com

1.12 以前の Swarm であれば、

$ docker run -d -p 4000:4000 swarm manage \
-H :4000 --replication \
--advertise 172.30.0.161:4000 \
consul://172.30.0.165:8500

みたいなコマンドで 4000 で Docker 操作をできるようにし、 JupyterHub がその 4000 番経由でコンテナを立ち上げる、といったことが可能でした。 ただ、これをセキュアにするためにはサーバ証明書だけではなくクライアント証明書も作成しないといけないのですごく大変 *1

証明書周りがラクな Swarm Mode でなんとかならないかと思っていたら、次の issue を発見。

github.com

  • dockerspawner/JupyterHub は Docker 1.12 以前の Docker Swarm で動作を想定。
  • 上述の issue にある jupyterhub_config.py には 1.12 以前の Docker Swarm で動作させる config を作成。

ただ、このコメント「SwarmSpawner」をもっと速く知ってればよかった!とあり、おっ、と思い調べたらどうやら次のレポジトリがそれのようです。

github.com

とりあえず動かしてみたけど、ThreadPool まわりでエラーが出たので、とりあえずやっつけ修正でプルリクを送送付。

Swarm Mode で Service を開始させるまでには至ったけど、次のエラーがでました。

  • エラー
[W 2017-02-25 09:58:08.099 JupyterHub utils:88] Failed to connect to http://jupyterhub-cdc872db616ac66adb3166c75e9ad183-1:8888/user/centos ([Errno -2] Name or service not known)
  • 生存確認
$ docker service ls
ID            NAME                                           MODE        REPLICAS  IMAGE
ivcdyicugvjg  jupyterhub-cdc872db616ac66adb3166c75e9ad183-1  replicated  0/1       jupyterhub/singleuser:latest

Swarm Mode 上での Service Discovery も準備する必要があるようですが、いったんここで力尽きました。。

forums.docker.com

にあるように、Swarm Mode では Service Discovery 用のツールはいらなくなったけど、あると便利ですね。

*1:Swarm Mode が出てきた経緯でもある