【发布时间】:2019-05-27 12:05:21
【问题描述】:
我已经在centOS 中安装了mysql,现在想启动mysql-server。但是,我得到了那个错误:
# systemctl start mysqld
Failed to get D-Bus connection: Operation not permitted
为了修复它,我创建了一个如图所示的 Dockerfile
FROM centos:7
MAINTAINER theodosiostziomakas <mymail@gmail.com>
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i
== systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
然后运行它来创建一个图像。
$ docker build --rm -t local/c7-systemd .
但我仍然遇到同样的错误。
我也看过这个proposed solution
有什么想法吗?
谢谢, 西奥。
【问题讨论】:
-
Docker 镜像通常没有 systemctl,因此当它们在 docker 中运行时,启动应用程序的方法通常会发生变化。官方 mysql 映像使用启动脚本来引导 mysql,而不是 init 脚本。您可能也想这样做(或者只使用对我来说非常有用的官方 mysql 映像)。
-
你好,丹。我认为它远不止这些......
-
@DanFarrell 你的意思是你用 mysql 镜像从 centOS 启动 mysql-server 对吧?
-
您应该假设 systemd 和像
systemctl、initctl和service这样的命令在 Docker 中不起作用。如果您的目标是拥有一个 MySQL 容器,stock mysql image 是一个很好的起点。通常,您直接将服务作为前台命令运行,无需任何类型的初始化系统。 -
@Theo I 不会花时间让初始化系统在 docker 中运行。没有特别令人信服的理由这样做 - 我会重新启动 container 而不是登录并进行传统的服务管理。我会尽量让它与主机操作系统完全分离并避免特权模式。我也会让我的容器保持短暂的状态,并专注于确保我理解为什么当容器消失时我的数据会被保留。除了启用不适用于 docker 范式的传统管理技术之外,我真的不明白 init 的作用。