summaryrefslogtreecommitdiffstats
path: root/nixos/modules/virtualisation/oci-containers.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/modules/virtualisation/oci-containers.nix')
-rw-r--r--nixos/modules/virtualisation/oci-containers.nix39
1 files changed, 20 insertions, 19 deletions
diff --git a/nixos/modules/virtualisation/oci-containers.nix b/nixos/modules/virtualisation/oci-containers.nix
index ee9fe62187d3..2dd15e3aba45 100644
--- a/nixos/modules/virtualisation/oci-containers.nix
+++ b/nixos/modules/virtualisation/oci-containers.nix
@@ -217,7 +217,7 @@ let
environment = proxy_env;
path =
- if cfg.backend == "docker" then [ pkgs.docker ]
+ if cfg.backend == "docker" then [ config.virtualisation.docker.package ]
else if cfg.backend == "podman" then [ config.virtualisation.podman.package ]
else throw "Unhandled backend: ${cfg.backend}";
@@ -227,29 +227,30 @@ let
${cfg.backend} load -i ${container.imageFile}
''}
'';
+
+ script = concatStringsSep " \\\n " ([
+ "exec ${cfg.backend} run"
+ "--rm"
+ "--name=${escapeShellArg name}"
+ "--log-driver=${container.log-driver}"
+ ] ++ optional (container.entrypoint != null)
+ "--entrypoint=${escapeShellArg container.entrypoint}"
+ ++ (mapAttrsToList (k: v: "-e ${escapeShellArg k}=${escapeShellArg v}") container.environment)
+ ++ map (p: "-p ${escapeShellArg p}") container.ports
+ ++ optional (container.user != null) "-u ${escapeShellArg container.user}"
+ ++ map (v: "-v ${escapeShellArg v}") container.volumes
+ ++ optional (container.workdir != null) "-w ${escapeShellArg container.workdir}"
+ ++ map escapeShellArg container.extraOptions
+ ++ [container.image]
+ ++ map escapeShellArg container.cmd
+ );
+
+ preStop = "[ $SERVICE_RESULT = success ] || ${cfg.backend} stop ${name}";
postStop = "${cfg.backend} rm -f ${name} || true";
serviceConfig = {
StandardOutput = "null";
StandardError = "null";
- ExecStart = concatStringsSep " \\\n " ([
- "${config.system.path}/bin/${cfg.backend} run"
- "--rm"
- "--name=${name}"
- "--log-driver=${container.log-driver}"
- ] ++ optional (container.entrypoint != null)
- "--entrypoint=${escapeShellArg container.entrypoint}"
- ++ (mapAttrsToList (k: v: "-e ${escapeShellArg k}=${escapeShellArg v}") container.environment)
- ++ map (p: "-p ${escapeShellArg p}") container.ports
- ++ optional (container.user != null) "-u ${escapeShellArg container.user}"
- ++ map (v: "-v ${escapeShellArg v}") container.volumes
- ++ optional (container.workdir != null) "-w ${escapeShellArg container.workdir}"
- ++ map escapeShellArg container.extraOptions
- ++ [container.image]
- ++ map escapeShellArg container.cmd
- );
-
- ExecStop = ''${pkgs.bash}/bin/sh -c "[ $SERVICE_RESULT = success ] || ${cfg.backend} stop ${name}"'';
### There is no generalized way of supporting `reload` for docker
### containers. Some containers may respond well to SIGHUP sent to their