Dockerfile 中で鍵サーバーから公開鍵の取得を試みるとエラーになる

Dockerfile の中で gpg --recv-keys を実行して公開鍵を取得しようとすると、エラーになったりならなかったりということがあったので、試行錯誤しながら対策してみました。

原因はおそらく IPv6 で鍵サーバーに接続しようとしたことで、 IPv6 を無効化することでひとまずエラーはなくなりなりました。

今回採用した IPv6 を無効化する方法は、 dirmngr.conf

disable-ipv6

を書くというものです。 gpg のオプションではなかったので、これにたどり着くまでは少し遠回りでしたね。

追記

エラー メッセージはこうでした。

gpg: keyserver receive failed: Cannot assign requested address

SRI を適用したスタイルシートのプリロードが機能しなかった

スタイルシートのフェッチを早くする目的で、プリロードを利用しようとして、

<link rel="preload" as="style" href="…" crossorigin="anonymous" integrity="…">

のあとに、

<link rel="stylesheet" href="…" crossorigin="anonymous" integrity="…">

としてみたところ、現バージョンの Chrome では両方ともフェッチしてむしろ無駄が増えることが判明したので、 SRI との併用は断念しました。

関連のバグは以下のようです。

https://bugs.chromium.org/p/chromium/issues/detail?id=677022

Azure VM で IPv6 に対応するには

この年末年始に Azure VM の構築に挑戦してみたのだが、その際に気づいた Azure VM での IPv6 対応について少し。

  1. Azure VM には直接公開 IPv6 アドレスを付与することができず、Load Balancer (無料) に付与する必要があること。
  2. Load Balancer では IPv6 通信を終端せず、NAT により内部 IPv6 アドレス (とポート番号) に変換されること。
  3. Azure VM で DHCPv6 により内部 IPv6 アドレスの利用ができるようになっている必要があること。

    資料: Azure Load Balancer の IPv6 の概要

    Docker にマウントしたディレクトリに作られる root 所有ディレクトリ対策

    Docker コンテナーにディレクトリをマウントして何か作業をすると、root 所有のディレクトリが作られてしまうことがある。

    そのようなディレクトリが作られても簡単に削除できるようにするのに、あらかじめ次のコマンドを実行してディレクトリに ACL を設定しておく方法が使える。

    find . -type d -exec setfacl -m d:u:${USER}:rwx {} \;
    

    Azure Functions で Docker Hub 自動タグ付けに挑戦中

    docker pull しなくてもタグ付けができるのではないかと考えて、自動タグ付け機能を Azure Functions で実現しようとしています。

    ウェブフックで API を呼び出そうとするとコールド スタートでタイムアウトしそうなことが判明して、キューを介した非同期処理にすることで回避しましたが、API の呼び出しはまだこれからといったところ。このまま無事完成するのでしょうか。

    https://bitbucket.org/linuxfront/functions-azure

    Azure Functions のコールド スタートが遅い

    Azure Functions でウェブフックを立てようとしていますが、コールド スタートに時間がかかっているようなので対策を検討しています。一度キューに突っ込んで非同期化すれば良さそうですが、キューに入れるだけでも Functions を使うと解決しそうもないのですよね。

    キューに入れるところは Microsoft Flow に持って行くとかでしょうか。

    https://github.com/Azure/Azure-Functions/issues/131