さわっても熱くない花火

ちょっとした驚きを食べながら生きています

Docker for Windows上でChinachuを動かそうとした話(安定動作させられなかった)

うららになりたいyanoshiです。とりあえずお腹を見せます。


不慮の事故から録画サーバーの調子が悪くなったので、えいやでWindows Server 2012 R2からWindows 10に移行させました。
ついでにこれまでVirtualBox上で動かしていたChinachuをDocker for Windows上で動かそうと試行錯誤してみました。

結論から言うと、「動いたけど安定動作させられなかった…」って感じです。私のDocker for Windows力が足りないだけなのかもしれないので、ツッコミどころがあればコメント頂ければ…

構成

yanoshi.hatenablog.jp
基本構成はこれを踏襲しています。
VirtualBoxの部分をDocker for Windowsにしようとしたって感じです。


使ったもの

docker-compose.yml

docker-mirakurun-chinachuのdocker-compose.ymlを適当に修正。修正の概要は以下の通り。

  • 当環境ではMirakurunは立ち上げる必要がなかった
  • Docker for Windowsなので「/etc/localtime」をマウントする事によるタイムゾーン設定は効かないので環境変数で対応
  • 録画フォルダの場所をいじりたくなった
version: '3.0'
services:
  chinachu:
    build:
        context: chinachu
        args:
         - REPOSITORY=git://github.com/Chinachu/Chinachu.git
         - BRANCH=gamma
    container_name: chinachu
    ports:
     - "10772:10772"
     - "5353:5353/udp"
    environment:
     - "TZ=JST-9"
    volumes:
     - ./chinachu/conf/config.json:/usr/local/chinachu/config.json
     - ./chinachu/conf/rules.json:/usr/local/chinachu/rules.json
     - ./chinachu/data:/usr/local/chinachu/data
     - ../rec:/usr/local/chinachu/recorded

遭遇した問題

[解決済] コンテナ上での時間がおかしい

コンテナ上ではホストOS(Windows)の時間が引き継がれているのだが、そこが不十分なようで。
ホストOSではJSTなわけですが、それが-9時間される事無くGMTとしてコンテナ上で使われてしまうようです。まじ困る。
この問題はissueにも報告されているようでして。取り敢えずの解決策は以下のページに載っていました。
Docker for Windows should resync VM time when computer resumes from sleep - Docker for Windows - Docker Forums

ntpdを動かして時間調整するという話ですね。そりゃそうなるよな…

docker run -it --pid host --privileged --rm debian nsenter -i -m -n -t 1 service ntpd start

[未解決] TCPパケットが再送されまくる

複数の番組が同時録画されると、もれなく録画データに欠損コマが発生します。
コンテナが落ちているのかもしれないし、VpnKitとやらが原因なのかもしれない。
とりあえずコンテナのカーネルパラメータをちょびっといじってみましたが、解決しませんでした。

Dockerのログはこんな感じ。

[00:00:46.640][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 495657912
[00:00:46.915][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 537217800
[00:00:48.253][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 535049760
[00:00:48.641][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 495657912
[00:00:48.916][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 537217800
[00:00:53.254][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 538042516
[00:00:53.642][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 498652128
[00:00:53.916][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 540226616
[00:00:55.254][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 538042516
[00:00:55.642][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 498652128
[00:00:57.916][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 540472700
[00:00:59.917][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 540472700
[00:01:00.254][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 538320720
[00:01:00.644][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 498912812
[00:01:03.256][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 538523168
[00:01:03.646][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 499107960
[00:01:04.917][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 540663468
[00:01:05.256][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 538523168
[00:01:05.647][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 499107960
[00:01:07.918][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 540943132
[00:01:10.121][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 540943132
[00:01:10.269][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 538804292
[00:01:10.649][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 499390544
[00:01:13.262][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 539790252
[00:01:13.650][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 500342924
[00:01:14.964][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 541848956
[00:01:15.262][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 539790252
[00:01:15.650][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 500342924
[00:01:18.964][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 544273788
[00:01:20.265][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 542220760
[00:01:20.651][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 502780896
[00:01:20.965][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 544273788
[00:01:22.628][VpnKit         ][Error  ] com.docker.slirp.exe: Socket.Stream: caught 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
[00:01:22.628][VpnKit         ][Info   ] 
[00:01:22.628][VpnKit         ][Info   ] 
[00:01:23.796][VpnKit         ][Error  ] com.docker.slirp.exe: Socket.Stream: caught 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
[00:01:23.796][VpnKit         ][Info   ] 
[00:01:23.796][VpnKit         ][Info   ] 
[00:01:24.266][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 542228060
[00:01:24.656][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 502788196
[00:01:27.678][VpnKit         ][Error  ] com.docker.slirp.exe: Socket.Stream: caught 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
[00:01:27.678][VpnKit         ][Info   ] 
[00:01:27.678][VpnKit         ][Info   ] 
[00:02:00.082][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 504622760
[00:02:00.092][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 485765164
[00:02:00.098][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 486772249
[00:02:02.083][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 504622760
[00:02:02.092][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 485765164
[00:02:02.102][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 486772249
[00:02:07.083][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 506302040
[00:02:07.094][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 487454500
[00:02:07.104][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 488515933
[00:02:10.083][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 506513248
[00:02:10.095][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 487665708
[00:02:10.104][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 488731357
[00:02:12.083][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 506513248
[00:02:12.095][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 487665708
[00:02:12.104][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 488731357
[00:02:17.083][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 506667516
[00:02:17.096][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 487802620
[00:02:17.105][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 488884329
[00:02:20.083][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 507051972
[00:02:20.097][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 488179776
[00:02:20.105][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 489268785
[00:02:22.083][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 507051972
[00:02:22.097][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 488179776
[00:02:22.105][VpnKit         ][Info   ] Tcp.Segment: TCP retransmission on timer seq = 489268785


この状態では常用できませんね。南無三。



所感

ガヴリールドロップアウトの録画に失敗していて辛い。