Docker — 无法连接到位于 unix:///var/run/docker.sock 的 Docker 守护进程

x80*_*486 3 docker nix nixpkgs

我在 Ubuntu 中17.12.0-ce通过NixLinux uplink 4.13.0-36-generic #40~16.04.1-Ubuntu SMP Fri Feb 16 23:25:58 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux安装了 Docker ( ),但是每次我尝试执行任何 Docker 命令时,它总是告诉我:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

\n\n

这就是我所做的:

\n\n
$ nix-env --install --prebuilt-only docker-17.12.0-ce\n\n$ nix-env -q\ndocker-17.12.0-ce\ngo-1.9.4\nhugo-0.32.2\nkotlin-1.2.21\nnix-1.11.16\nnodejs-8.9.4\nopenjdk-8u172b02\nopenjdk-9.0.4-b11\n\n$ docker version\nClient:\n Version:   17.12.0-ce\n API version:   1.35\n Go version:    go1.9.4\n Git commit:    486a48d2701493bb65385788a291e36febb44ec1\n Built: Thu Feb 15 13:56:40 2018\n OS/Arch:   linux/amd64\n Experimental:  false\nCannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?\n\n$ docker ps -a\nCannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?\n
Run Code Online (Sandbox Code Playgroud)\n\n

我阅读了Linux 的安装后步骤(尽管这在某种程度上不适用于 Nix 软件包),然后继续添加用户docker和所有这些内容……但仍然没有任何结果。

\n\n

我知道这个问题 \xe2\x80\x94 有很多答案,我已经尝试了几种“解决方案”......但还没有运气。

\n

Emm*_*osa 5

当您在非 NixOS 发行版上安装软件包时,不会设置服务(例如守护进程)。服务由 NixOS 模块创建,因此它们需要 NixOS。

例如,对于 Docker,守护进程是通过设置 systemd 服务来创建的。NixOS模块的片段如下所示:

  ...
  options.virtualisation.docker = {
    enable =
      mkOption {
        type = types.bool;
        default = false;
        description =
          ''
            This option enables docker, a daemon that manages
            linux containers. Users in the "docker" group can interact with
            the daemon (e.g. to start or stop containers) using the
            <command>docker</command> command line tool.
          '';
};
...

systemd.services.docker = {
        wantedBy = optional cfg.enableOnBoot "multi-user.target";
        environment = proxy_env;
        serviceConfig = {
          ExecStart = [
            ""
            ''
              ${cfg.package}/bin/dockerd \
                --group=docker \
                --host=fd:// \
                --log-driver=${cfg.logDriver} \
                ${optionalString (cfg.storageDriver != null) "--storage-driver=${cfg.storageDriver}"} \
                ${optionalString cfg.liveRestore "--live-restore" } \
                ${cfg.extraOptions}
            ''];
          ExecReload=[
            ""
            "${pkgs.procps}/bin/kill -s HUP $MAINPID"
          ];
};
...
Run Code Online (Sandbox Code Playgroud)

您也许能够在其他发行版上完成等效操作,但您必须手动创建服务和配置文件。

  • 你说得对。尽管“nix”被宣传为 Linux 的包管理器,而且确实如此,但没有明确的是某些包是专为 NixOS 设计的。我们确实应该澄清这一点。就其价值而言,作为一般规则,应用程序/实用程序可以正常工作,但服务却不能,因为它们需要与底层操作系统进行更深入的集成;区域“nix”无法进入。 (5认同)