Pi-holeをdocker runだけで起動する

Pi-holeのDocker公式イメージはdocker-composeでの起動が案内されている。しかしNAS製品の多くはGUIからコンテナを管理する設計であり、docker-composeを使うにはSSHでログインする必要がある。Pi-holeを動かすためだけにSSHの管理を増やすのは合理的でない。

実際にはdocker-composeの設定はすべて docker run のオプションに変換できるため、docker-compose無しでもPi-holeは起動できる。本稿では、公式のdocker-compose設定を docker run コマンドに変換した例を示し、あわせて各オプションの意味を整理する。

docker runコマンド

以下は、Pi-hole公式のdocker-compose設定と同等の docker run コマンドである。

docker run -d \\
  --name pihole \\
  -p 53:53/tcp \\
  -p 53:53/udp \\
  -p 80:80/tcp \\
  -p 443:443/tcp \\
  -e TZ='Asia/Tokyo' \\
  -e FTLCONF_webserver_api_password='任意のパスワード' \\
  -e FTLCONF_dns_listeningMode='ALL' \\
  -v /path/to/etc-pihole:/etc/pihole \\
  --cap-add=NET_ADMIN \\
  --cap-add=SYS_TIME \\
  --cap-add=SYS_NICE \\
  --restart unless-stopped \\
  pihole/pihole:latest

NASのコンテナ管理GUIにこれらのパラメータを入力するか、SSH不要でコマンドを実行できる手段があればそれを利用する。

オプションの説明

ポートマッピング(-p)

  • 53:53/tcp および 53:53/udp: DNS用ポート。TCP/UDPの両方が必要
  • 80:80/tcp: 管理用WebインターフェースのHTTPポート
  • 443:443/tcp: 管理用WebインターフェースのHTTPSポート。Pi-hole FTLが自己署名証明書を自動生成する

Pi-holeをDHCPサーバとしても使用する場合は -p 67:67/udp を追加する。NTPサーバとしても使用する場合は -p 123:123/udp を追加する。

環境変数(-e)

  • TZ: タイムゾーン。IANA形式で指定する(日本の場合は Asia/Tokyo
  • FTLCONF_webserver_api_password: 管理用Webインターフェースのパスワード。未指定の場合はランダムなパスワードが自動生成される
  • FTLCONF_dns_listeningMode: DNSの待ち受けモード。Dockerのデフォルトネットワーク(bridgeモード)を使用する場合は ALL を指定する

ボリューム(-v)

  • /path/to/etc-pihole:/etc/pihole: Pi-holeのデータベースと設定ファイルの永続化先。コンテナを再作成してもデータが保持される。/path/to/etc-pihole は実際のパスに置き換える

Pi-hole v5からv6へ移行する場合で、以前にdnsmasqのカスタム設定を使用していた場合は、初回起動時のみ /path/to/etc-dnsmasq.d:/etc/dnsmasq.d のマウントと環境変数 FTLCONF_misc_etc_dnsmasq_d=true の追加が必要になる。移行完了後は不要になる。v6から新規導入する場合はこの設定は不要である。

ケーパビリティ(--cap-add)

  • NET_ADMIN: Pi-holeをDHCPサーバとして使用する場合に必要。DNSのみの用途では不要だが、公式設定に含まれているためそのまま指定している
  • SYS_TIME: Pi-holeをNTPクライアントとして使用し、ホストのシステム時刻を設定する場合に必要
  • SYS_NICE: Pi-holeのプロセスに高い処理優先度を付与する。任意の設定

再起動ポリシー(--restart)

  • unless-stopped: 手動で停止した場合を除き、コンテナが停止したときに自動で再起動する。NASの再起動後もPi-holeが自動的に起動するようになる

docker-compose(日本語注釈版)

参考として、公式のdocker-compose設定に日本語の注釈を付けたものを以下に示す。

services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      # DNSポート(TCP/UDP両方必要)
      - "53:53/tcp"
      - "53:53/udp"
      # 管理画面 HTTPポート
      - "80:80/tcp"
      # 管理画面 HTTPSポート(FTLが自己署名証明書を自動生成)
      - "443:443/tcp"
      # DHCPサーバとして使う場合は以下を有効にする
      #- "67:67/udp"
      # NTPサーバとして使う場合は以下を有効にする
      #- "123:123/udp"
    environment:
      # タイムゾーンをIANA形式で指定(日本: Asia/Tokyo)
      TZ: 'Asia/Tokyo'
      # 管理画面のパスワード(未指定ならランダム生成)
      FTLCONF_webserver_api_password: '任意のパスワード'
      # Dockerのbridgeネットワーク使用時は'ALL'を指定
      FTLCONF_dns_listeningMode: 'ALL'
    volumes:
      # データベースと設定ファイルの永続化
      - './etc-pihole:/etc/pihole'
      # v5からv6への移行時のみ必要(初回起動後は削除可)
      # 環境変数 FTLCONF_misc_etc_dnsmasq_d: 'true' も併せて設定すること
      # v6新規導入の場合は不要
      #- './etc-dnsmasq.d:/etc/dnsmasq.d'
    cap_add:
      # DHCPサーバとして使う場合に必要
      - NET_ADMIN
      # NTPクライアントとしてホストの時刻を設定する場合に必要
      - SYS_TIME
      # プロセスの処理優先度を上げる(任意)
      - SYS_NICE
    # 手動停止以外では自動再起動
    restart: unless-stopped

Read more

暇が怖いだけ

今日あなたが「忙しい」と口にした回数を数えてみるといい。三回を超えていたら、それはもう事実の報告ではない。呪文だ。唱え続けることで、自分に存在価値があると確認するための。 忙しさは現代における最も手軽な自己証明になった。忙しくしていれば、少なくとも何かをしていることにはなる。何かをしていれば、生きている意味を問わなくて済む。逆に言えば、暇になった途端に、その問いが戻ってくる。だから人は忙しくする。忙しくあろうとする。忙しいと言いたがる。鎖を愛した動物のように、自分でかけた拘束を手放せない。 ここに一つ、居心地の悪い問いを置いておく。あなたが一日のなかで一番多くの時間を費やしていることは、あなたが一番大切にしていることと一致しているか。一致していないとしたら、その時間は誰のものなのか。 守られない時間 約二千年前、ストア派の哲学者セネカは『人生の短さについて』でこう嘆いた。人は財産や金のことになると吝嗇になるのに、時間を浪費することには驚くほど無頓着だ、と。時間こそ、最も惜しむべきものであるにもかかわらず。 この指摘は二千年経っても古びていない。むしろ悪化している。 財布か

By Sakashita Yasunobu

意味という病

あなたの人生に意味があるかどうか、宇宙は一度も気にしたことがない。 太陽は46億年前から燃えている。地球は回り続けている。そのどこにも、あなたの存在を前提とした設計図はない。もし明日、人類がまるごと消えたとしても、星は瞬き続ける。海は満ちて引く。何も変わらない。 それなのに、人は意味を求める。仕事に意味を、人間関係に意味を、生きていること自体に意味を。朝起きるたびに、意識するにせよしないにせよ、「なぜ」という問いがどこかで回っている。 これは病だと思う。 治す方法があるのかどうかも分からない、厄介な病だ。 観客のいない劇場 一つ、思考実験をしてみる。 もし宇宙のどこにも、人間以外の知的生命体がいなかったとしたら。誰も人類の存在を知らず、誰も観察しておらず、誰も記録していなかったとしたら。人間がこの星の上で営んできたすべてのこと、文明、芸術、戦争、愛、それらに意味はあるだろうか。 直感的には「ある」と言いたくなる。でも、その「ある」の根拠を言語化しようとすると、途端に足元が崩れる。 意味というのは、誰かがそれを認識して初めて成立するものだという立場がある。であれば、宇

By Sakashita Yasunobu

優しい人から壊れる

友人が泣いている。あなたはその隣に座って、背中をさする。言葉が見つからないまま、ただそこにいる。胸が詰まる。相手の苦しみが、自分の胸にも流れ込んでくるような気がする。 それは美しい光景だ、と誰もが言う。 ただ、もう少しだけ先を考えてみてほしい。あなたが感じているその痛みは、本当に相手の痛みだろうか。それとも、相手の痛みに触発された、あなた自身の別の何かだろうか。そして、その区別がつかなくなったとき、壊れるのはどちらだろう。 スポットライトの外は暗い 共感には奇妙な性質がある。近くにあるもの、目に見えるもの、名前と顔があるものに、不釣り合いなほど強く反応する。 イェール大学の心理学者ポール・ブルームは2016年の著書 Against Empathy で、共感をスポットライトに喩えた。照らされた一点だけが鮮やかに浮かび上がり、その外側は真っ暗なままだ。一人の子どもが井戸に落ちれば世界中が涙を流すが、統計の中で消えていく数万の子どもたちには何も感じない。 ブルームの指摘はさらに厄介な方向へ進む。共感はバイアスに満ちている。自分に似た人、魅力的な人、同じ民族や国籍の人に対して、よ

By Sakashita Yasunobu

何も起きなかった日

先月の火曜日に何をしていたか、思い出せるだろうか。 おそらく思い出せない。それは記憶力の問題ではなく、何も起きなかったからだ。何も起きなかった日は記憶に残らない。記憶に残らない日は、振り返ったとき、最初からなかったのと区別がつかない。 人生の大半は、こういう日でできている。 溶けていく曜日 子供の頃の夏休みは果てしなく長かった。35日間が、体感では半年くらいあった。ところが大人になると、半年が体感で35日くらいになる。時間の流れ方が、どこかで反転している。 神経科学者のデイヴィッド・イーグルマンは、この現象を記憶の密度から説明している。脳は新しい経験に遭遇すると、より多くの情報を符号化する。記憶が密であれば、あとから振り返ったとき、その期間は長く感じられる。逆に、毎日が同じパターンの繰り返しなら、脳は記録すべきものをほとんど見つけられない。記憶はスカスカになる。スカスカの記憶を振り返ると、時間はあっという間に過ぎたように感じる。 つまりルーティンは、主観的な人生を縮めている。比喩ではない。知覚の構造として、そうなっている。毎日同じ道を歩き、同じ時間に同じ席に座り、同じもの

By Sakashita Yasunobu