내 로컬 워크스테이션에 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;
};
};
}