如何使用 nix 安装和运行 docker

如何使用 nix 安装和运行 docker

我在 WSL 上使用 Debian。 Nix 已经安装。

我使用以下命令安装 docker:

nix-env -iA nixpkgs.docker

我想启动守护进程:

systemctl start docker

无法连接到总线:没有这样的文件或目录

更新

仅供参考 $XDG_RUNTIME_DIR= /mnt/wslg/runtime-dir $UID=1000 $DBUS_SESSION_BUS_ADDRESS 没有值

ls -l /mnt/wslg/runtime-dir

drwx------ 4 皮埃尔 皮埃尔 120 十二月 26 00:41 运行时目录

我可以乘坐巴士。但我需要使用 sudo

sudo systemctl start docker

现在我有这个问题

无法启动 docker.service:找不到单元 docker.service。

我认为 docker.service 是这个文件:/etc/systemd/system/docker.service

但它在我的操作系统上不存在。我尝试使用 nix 卸载并重新安装 docker。无济于事

我认为这是有联系的:

https://discourse.nixos.org/t/docker-packages-systemd-unit-files-dont-work-on-ubuntu/12160

sudo cp ~/.nix-profile/etc/systemd/system/docker.service /etc/systemd/system/docker.service

sudo cp ~/.nix-profile/etc/systemd/system/docker.sock /var/run/docker.sock

sudo systemctl enable docker


 Failed to start docker.service: Unit docker.socket not found.

无法启动 docker.service:找不到单元 docker.socket。

读完这篇文章后关联,我使用此命令是为了知道应该在哪里替换 docker.socket 文件。 :

 systemctl list-sockets --all

但没有列出 docker.socket

**更新

我从头开始编写了所有命令。现在我遇到了这个问题 docker.service 的依赖作业失败。有关详细信息,请参阅“journalctl -xe”。

答案1

如果我正确理解了问题,您必须XDG_RUNTIME_DIR手动设置(因为/run/user/...有时由其他用户拥有??(不太确定说实话)):

那么你可以尝试设置XDG_RUNTIME_DIR = "/run/user/$UID"然后再次启动nix吗?

如果这不起作用,您可能还必须设置DBUS_SESSION_BUS_ADDRESSDBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$UID/bus".

您可以在这里找到与您类似的线程: https://superuser.com/questions/1561076/systemctl-user-failed-to-connect-to-bus-no-such-file-or-directory-debian-9

这有帮助/解决你的问题吗?

答案2

您必须查找目录,使用cd ..并转到/bin/,那里有您的程序,然后开始使用./docker或 systemctl start docker。

答案3

sudo groupadd docker
sudo chgrp docker docker.sock
sudo systemctl start docker

无错误信息

答案4

需要修改默认的docker.service,例如更改启动参数

[Unit]
...
Requires=~/.nix-profile/etc/systemd/system/docker.socket

[Service]
...
ExecStart=/home/xx/.nix-profile/bin/dockerd -H unix:///var/run/docker.sock

可能你需要重新加载

sudo systemctl daemon-reload

相关内容