0%

Docker容器中使用systemctl报错Failed to get D-Bus connection: Operation not permitted

在Docker容器中执行systemctl命令时,无论是启动nginx, 或者是vsftpd等服务,都会报如下错误。

1
2
systemctl status vsftpd
Failed to get D-Bus connection: Operation not permitted

解决方法

  1. 在启动容器时,需要加上--privileged参数来添加权限。
  2. 不能使用默认的bash,而需要执行/usr/sbin/init

执行命令:

1
docker run -dit --privileged <image_id> /usr/sbin/init

以下我们以安装启动vsftpd服务来例子来讲解。

启动centos的容器

1
docker run -dit --privileged 3816db78c729 /usr/sbin/init

进入刚才启动的容器

1
docker exec -it d9c3cf1ad7a bash

yum安装vsftpd服务

1
yum install -y vsftpd

启动vsftpd服务

1
systemctl start vsftpd

查看vsftpd服务的状态

1
2
3
4
5
6
7
8
9
10
11
12
systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2019-11-16 03:55:51 UTC; 2s ago
Process: 176 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 177 (vsftpd)
CGroup: /docker/d9c3cf1ad7a9084f7563169cbac71b7a5687ebc25703c43f31b6f33a59e686e6/system.slice/vsftpd.service
└─177 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
‣ 177 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Nov 16 03:55:51 d9c3cf1ad7a9 systemd[1]: Starting Vsftpd ftp daemon...
Nov 16 03:55:51 d9c3cf1ad7a9 systemd[1]: Started Vsftpd ftp daemon.