NixOS宣言コンテナとローカルシステムパス(docker-composeボリューム機能と同じ)間でファイルを同期する方法は?

NixOS宣言コンテナとローカルシステムパス(docker-composeボリューム機能と同じ)間でファイルを同期する方法は?

私のローカルワークステーションにNixOS 22.11がインストールされています。

私は使う追加コンテナシステムを再構築しなくても、命令型コンテナなどの宣言型NixOSコンテナを実行できるパッケージです。

デモコンテナを実行しようとしています。コンテナ内にダウンロードされ圧縮されておりwoocommerce、コンテナとローカルシステムパス間でこれらのファイルを同期したいと思います。主な目的は、nixをよりよく学ぶことです。 docker-composeでは、次の設定を使用できます。

volumes:
  - <local-path>:<container-path>

NixOSコンテナでこれをどのように実装しますか?

次の設定を試しましたが、ローカルシステムディレクトリはまだ空です。

fileSystems."/var/www/demo/wp-content/plugins/woocommerce" = {
    device = "/root/woocommerce";
    options = [ "bind" ];
    # noCheck = true;
  }; 
};


serviceConfig = {
  BindPaths = [ "/var/www/demo/wp-content/plugins/woocommerce:/root/woocommerce" ]
};

全体構成woo.nix

{ pkgs, ... }:

{
  containers.demo = {
    config = {
      fileSystems."/var/www/demo/wp-content/plugins/woocommerce" = {
        device = "/root/woocommerce";
        options = [ "bind" ];
        # noCheck = true;
      };
      users.users.demo = {
        isSystemUser = true;
        createHome = true;
        group = "demo";
      };
      users.groups.demo = { };

      systemd.services.woo = {
        wantedBy = [ "multi-user.target" ];
        path = with pkgs; [ coreutils wget gzip curl unzip ];
        script = ''
          /run/current-system/sw/bin/curl -L https://downloads.wordpress.org/plugin/woocommerce.7.4.1.zip -o /root/woocommerce.zip &&
          unzip /root/woocommerce.zip -d /root &&
          rm /root/woocommerce.zip
        '';
        serviceConfig = {
          BindPaths = [ "/var/www/demo/wp-content/plugins/woocommerce:/root/woocommerce" ];
          # ReadWriteDirectories = [ "/root/woocommerce" ];
        };
      };
    };
  };
  environment.systemPackages = [ pkgs.coreutils pkgs.wget pkgs.gzip pkgs.curl pkgs.unzip ];
}

次のコマンドで実行します。

sudo extra-container create --start <<EOF
$(cat woo.nix)
EOF

NixOS宣言コンテナとローカルシステム間でファイルを同期する最良の方法は何ですか?

ベストアンサー1

このbindMountsオプションは私に必要なものです。

containers.demo = {
    bindMounts = {
      "/root/woocommerce" = {
        hostPath = "/var/www/demo/wp-content/plugins/woocommerce";
        isReadOnly = false;
      };
    };

}

おすすめ記事