Ubuntu Docker镜像中的systemd和systemctl

Dun*_*ill 58 ubuntu ubuntu-server systemd docker systemctl

它似乎systemd在Ubuntu Docker镜像中不活跃或不可用.

我从ubuntu:16.04ubuntu:16.10图像运行Docker容器.

如果我systemctl status ssh16,04容器中执行,结果就是错误Failed to connect to bus: No such file or directory.在16.10容器中的误差bash: systemctl: command not found.

如果我which systemctl16.04容器中找到systemctl 但在16.10容器中找不到.

我发现/lib/systemd存在.

我尝试过安装systemd apt-get install systemd libpam-systemd systemd-ui.然后which systemctl找到systemctl 16.10systemctl status ssh仍然给出错误Failed to connect to bus: No such file or directory

我的主要问题是:如何激活systemd和systemctl以在Ubuntu Docker镜像中使用?

为什么systemd在Ubuntu Docker容器中不活动?systemd不用于实例化容器吗?

我并没有发现有关此主题的Ubuntu/Ubuntu的泊坞图像,只有从Ubuntu转换信息的任何文件Upstartsystemd.有没有文件给出完整的解释?

BMi*_*tch 57

这是设计的.Docker应该在容器的前台运行一个进程,它将在容器的pid命名空间中作为PID 1生成.Docker专为进程隔离而设计,不适用于操作系统虚拟化,因此没有其他操作系统进程和守护进程在容器内运行(如systemd,cron,syslog等),只有您运行的入口点或命令.

如果它们包含systemd命令,那么你会发现很多东西都没有用,因为你的入口点取代了init.Systemd还可以使用docker限制容器内部的cgroup,因为更改cgroups的能力可以允许进程逃避容器的隔离.如果没有systemd作为init在容器内运行,则没有守护进程来处理你的启动和停止命令.

  • 顺便说一句....因为我有一些脚本发布了"systemctl start"和"systemctl stop",我只是简单地创建了一个可以处理必要步骤的替换脚本.....它只是解释了/etc/systemd/system/*.service文件.不需要SystemD守护程序.它甚至可以执行您在docker容器中对PID-1进程的期望.随意浏览https://github.com/gdraheim/docker-systemctl-replacement (4认同)
  • 没有讨论你链接到的教程中的任何要点,所以我不知道你怎么说它"几乎是教程中的第一个注释",它只是链接到文档的首页.我从Self-Paced Docker Training视频中了解到容器的入口点具有PID 1,因此隐含地理解入口点取代了systemd.然而,在阅读了Docker文档的众多部分之后,我觉得我还没有阅读完整而清晰的解释. (3认同)
  • 为了几乎在基本映像中包含一个操作环境来执行有用的操作,我的理解是,此映像与完整OS之间的唯一区别是它没有内核,而是使用主机OS的内核。也许假设您了解OS。我是Linux的新手。我需要详细说明常规的Ubuntu / Linux Distro操作环境与Dockerized Ubuntu / Linux Distro操作环境之间的区别。 (2认同)