如何在最新版本的Ubuntu(18.10)上运行使用SystemD的Docker容器?

3

我试图执行一个使用'ubuntu:latest'构建的Docker镜像,但是当我运行容器时,一直出现SystemD错误消息:

System has not been booted with systemd as init system (PID 1). Can't operate.

如果我尝试使用此解决方案并使用docker run -it -e container=docker your-image-name /sbin/init启动容器,则会出现以下错误:
Failed to mount tmpfs at /run: Operation not permitted
Failed to mount tmpfs at /run/lock: Operation not permitted
[!!!!!!] Failed to mount API filesystems, freezing.
Freezing execution.

我应该尝试什么不同的方法?


1
通常情况下,您不希望在容器内运行诸如systemd(或其他任何东西)之类的进程管理器。您究竟想做什么? - larsks
我正在尝试启动一个 Nginx 和 SSHD 容器。如果所有 Linux 发行版都已经转移到 SystemD 上,如何避免使用它?看起来这应该是一个早就解决了的问题? - xorLogic
1
已经解决了。您在容器中不使用处理器管理器。您启动所需的服务就可以了。查看任何官方容器,例如nginx、httpd、mysql等。您不应在容器内运行ssh;这就是 docker exec 的用途。 - larsks
听起来你像在管理容器,就像在管理虚拟机一样。我强烈反对这种做法。你应该只使用Ansible构建镜像和运行容器。 - BMitch
不用多说,配置文件将进入容器由 Nginx 服务器进行托管。实际上这很基础。 - xorLogic
显示剩余3条评论
3个回答

3
您可以使用不同版本(如16.04)来解决此问题:
docker run -d \
  -h ubuntu \
  --name ubuntu \
  --privileged \
  docker.io/library/ubuntu:16.04 /sbin/init

运行后,您可以使用以下命令进行访问:
docker exec -it ubuntu /bin/bash

这个版本使用systemd


1
为了在Docker中运行Ubuntu 18 systemd,您可以使用以下命令:
运行容器:
docker run -d --name stack_overflow_53750952 --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro jrei/systemd-ubuntu:18.04

输入容器:

docker exec -it stack_overflow_53750952 bash

那么正如你所看到的: 容器内运行systemd的截图

-5

升级到Ubuntu Bionic并尝试使用/sbin/init方法


1
我的问题是关于Ubuntu,不是CentOS。 - xorLogic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接