Previously the Docker daemon was started by systemd socket activation. Thus, the Docker test waited for the sockets.target unit. But when the docker module was changed to start the Docker daemon at boot instead of by socket activation, the test was left untouched. With the Docker 20.10 update this lead to a timing issue, where the docker command is run before the Docker daemon has started and hangs. Fixes #109416
50 lines
1.5 KiB
Nix
50 lines
1.5 KiB
Nix
# This test runs docker and checks if simple container starts
|
|
|
|
import ./make-test-python.nix ({ pkgs, ...} : {
|
|
name = "docker";
|
|
meta = with pkgs.lib.maintainers; {
|
|
maintainers = [ nequissimus offline ];
|
|
};
|
|
|
|
nodes = {
|
|
docker =
|
|
{ pkgs, ... }:
|
|
{
|
|
virtualisation.docker.enable = true;
|
|
virtualisation.docker.package = pkgs.docker;
|
|
|
|
users.users = {
|
|
noprivs = {
|
|
isNormalUser = true;
|
|
description = "Can't access the docker daemon";
|
|
password = "foobar";
|
|
};
|
|
|
|
hasprivs = {
|
|
isNormalUser = true;
|
|
description = "Can access the docker daemon";
|
|
password = "foobar";
|
|
extraGroups = [ "docker" ];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
testScript = ''
|
|
start_all()
|
|
|
|
docker.wait_for_unit("docker.service")
|
|
docker.succeed("tar cv --files-from /dev/null | docker import - scratchimg")
|
|
docker.succeed(
|
|
"docker run -d --name=sleeping -v /nix/store:/nix/store -v /run/current-system/sw/bin:/bin scratchimg /bin/sleep 10"
|
|
)
|
|
docker.succeed("docker ps | grep sleeping")
|
|
docker.succeed("sudo -u hasprivs docker ps")
|
|
docker.fail("sudo -u noprivs docker ps")
|
|
docker.succeed("docker stop sleeping")
|
|
|
|
# Must match version 4 times to ensure client and server git commits and versions are correct
|
|
docker.succeed('[ $(docker version | grep ${pkgs.docker.version} | wc -l) = "4" ]')
|
|
'';
|
|
})
|