centos dbus 启动,centos7启动服务命令

如何在docker centos容器中使用systemd

由于以下几个原因,docker的官方centos镜像中没有提供systemd服务:

systemd依赖于CAP_SYS_ADMIN capability.意味着运行Docker容器需要获得–privileged.这不利于一个base image;

systemd依赖于访问cgroups filesystem;

systemd有很多并不重要的文件存放在一个docker容器中,如果不删除它们会产生一些错误;

注意

在大规模Docker容器或集群等环境下,并不推荐使用Systemd来管理服务,还是使用诸如 Kubernetes、compose等管理工具吧。但在可控、几个容器环境下,我们还是希望使用systemd来方便管理我们的服务,那如何开启systemd呢?别急,请看下面。

1)首先创建一个Dockerfile用来创建systemd的base image,即父镜像。如下所示:

FROM centos:latest

MAINTAINER"xuchao"<xiaoxu790@126.com>

RUN yum-y install systemd systemd-libs

RUN yum clean all;\

(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"]

2)执行docker build命令,来创建一个有systemd的base image:

# docker build--rm-t systemd/centos7.

3)OK后,查看下我们build好的已有docker镜像。

# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

systemd/centos7 latest 25de776022cb 59 minutes ago 314.8 MB

docker.io/centos latest a65193109361 3 weeks ago 196.7 MB

4)下面,我们就可以基于这个Systemd的镜像来创建所需要的其他服务的镜像了,比如Mariadb。当然这里就还需要另外一个Dockerfile。如下所示:

FROM systemd/centos7

MAINTAINER"xuchao"<xiaoxu790@126.com>

RUN yum-y install mariadb-server mariadb; systemctl enable mariadb.service

RUN yum clean all

EXPOSE 3306

CMD ["/usr/sbin/init"]

5)为避免冲突,执行如下步骤前,需要先将上述的Dockerfile文件重命名为其他名称。

同样的,执行docker build命令来创建一个我们需要的Mariadb镜像。

# docker build-t mariadb/centos7.

6)OK后,再查看下我们build好的已有docker镜像。

# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

mariadb/centos7 latest 9ed032ae46c3 13 minutes ago 555.1 MB

systemd/centos7 latest 25de776022cb 59 minutes ago 314.8 MB

docker.io/centos latest a65193109361 3 weeks ago 196.7 MB

7)不出所料,镜像都已经build OK了。

下面,我们就需要启动这个Mariadb的docker镜像了(注意需要使用参数–privileged)。如下所示:

# docker run--privileged-d-v/sys/fs/cgroup:/sys/fs/cgroup:ro-h systemd_mariadb-p 3306:3306-t mariadb/centos7

8)执行后续步骤前,我们需要先获取下该镜像启动后的容器ID。如下所示:

# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

d6a080adf45a mariadb/centos7"/usr/sbin/init" 22 minutes ago Up 22 minutes 0.0.0.0:3306->3306/tcp determined_heisenberg

9)通过下面的命令在容器内执行命令:(其中d6a080adf45a为容器ID):

# docker exec d6a080adf45a ps-ef

UID PID PPID C STIME TTY TIME CMD

root 1 0 0 14:32? 00:00:00/usr/sbin/init

root 17 1 0 14:32? 00:00:00/usr/lib/systemd/systemd-journald

mysql 18 1 0 14:32? 00:00:00/bin/sh/usr/libexec/mariadb-prepare-db-dir mariadb.service

root 38 1 0 14:32? 00:00:00 [dbus-daemon]<defunct>

mysql 39 18 0 14:33? 00:00:00/bin/sh/usr/libexec/mariadb-prepare-db-dir mariadb.service

mysql 40 39 0 14:33? 00:00:00 systemctl show-p Group mariadb.service

mysql 41 39 0 14:33? 00:00:00 sed s/^Group=//

root 42 0 0 14:33? 00:00:00 ps-ef

10)由此可见,Mariadb数据库服务已经正常启动起来了。

当然,我们还可以以交互式方式进入到该容器内,执行相关操作,比如验证systemctl命令。

# docker exec-it d6a080adf45a bash

[root@systemd_mariadb/]# systemctl status mariadb

● mariadb.service- MariaDB database server

Loaded: loaded(/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)

Active: active(running) since Sat 2016-06-25 14:33:51 UTC; 1min 40s ago

Process: 101 ExecStartPost=/usr/libexec/mariadb-wait-ready$MAINPID(code=exited, status=0/SUCCESS)

Process: 18 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir%n(code=exited, status=0/SUCCESS)

Main PID: 100(mysqld_safe)

CGroup:/system.slice/docker-d6a080adf45a2d4c4c5d203cbe7aa354dbef886be3da296edf70e75267e9f05f.scope/system.slice/mariadb.service

├─100/bin/sh/usr/bin/mysqld_safe--basedir=/usr

└─256/usr/libexec/mysqld--basedir=/usr--datadir=/var/lib/mysql--plugin-dir=/usr/lib64/mysql/plugin--log-error=/var...

......................

OK,整个流程就讲完了。但有个遗留的问题,即:使用systemctl restart命令重启服务

CentOS7网络设置修复

服务器有两个网卡enp7s0和enp8s0   

服务器需要通过enp8s0和互联网联通,互联网为笔记本转接

通过centos7界面修改ip,失败;

通过centos7的网络配置文件/etc/sysconfig/network-scripts/ifcfg-enp8s0修改ip设置

设置如下:

1.启动 service network start报错,通过journalctl-xe查看如下

-- Defined-By: systemd

-- Support:

--

-- Unit fprintd.service has begun starting up.

12月 29 19:31:12 crrchost dbus-daemon[851]: dbus[851]: [system] Successfully activated service'net.reactivated.Fprint'

12月 29 19:31:12 crrchost dbus[851]: [system] Successfully activated service'net.reactivated.Fprint'

12月 29 19:31:12 crrchost systemd[1]: Started Fingerprint Authentication Daemon.

-- Subject: Unit fprintd.service has finished start-up

-- Defined-By: systemd

-- Support:

--

-- Unit fprintd.service has finished starting up.

--

-- The start-up result is done.

12月 29 19:31:12 crrchost fprintd[6685]: Launching FprintObject

12月 29 19:31:12 crrchost fprintd[6685]:** Message: D-Bus service launched with name: net.reactivated.Fprint

12月 29 19:31:12 crrchost fprintd[6685]:** Message: entering main loop

12月 29 19:31:18 crrchost polkitd[835]: Operator of unix-session:1 successfully authenticated as unix-user:windfarm to gain TEMPORARY authorization for action org.freedesktop.systemd1.manage-units for system-bus

12月 29 19:31:18 crrchost systemd[1]: Starting LSB: Bring up/down networking...

-- Subject: Unit network.service has begun start-up

-- Defined-By: systemd

-- Support:

--

-- Unit network.service has begun starting up.

12月 29 19:31:18 crrchost network[6693]:正在打开环回接口: [ 确定  ]

12月 29 19:31:18 crrchost network[6693]:正在打开接口 enp7s0:

12月 29 19:31:24 crrchost network[6693]:正在确定 enp7s0的 IP信息...失败:不存在链接。检查电缆?

12月 29 19:31:24 crrchost network[6693]: [失败]

12月 29 19:31:24 crrchost network[6693]:正在打开接口 enp8s0: RTNETLINK answers: File exists

12月 29 19:31:25 crrchost network[6693]: [ 确定  ]

12月 29 19:31:25 crrchost network[6693]: RTNETLINK answers: File exists

12月 29 19:31:25 crrchost network[6693]: RTNETLINK answers: File exists

12月 29 19:31:25 crrchost network[6693]: RTNETLINK answers: File exists

12月 29 19:31:25 crrchost network[6693]: RTNETLINK answers: File exists

12月 29 19:31:25 crrchost network[6693]: RTNETLINK answers: File exists

12月 29 19:31:25 crrchost network[6693]: RTNETLINK answers: File exists

12月 29 19:31:25 crrchost network[6693]: RTNETLINK answers: File exists

12月 29 19:31:25 crrchost network[6693]: RTNETLINK answers: File exists

12月 29 19:31:25 crrchost network[6693]: RTNETLINK answers: File exists

12月 29 19:31:25 crrchost systemd[1]: network.service: control process exited, code=exited status=1

12月 29 19:31:25 crrchost systemd[1]: Failed to start LSB: Bring up/down networking.

-- Subject: Unit network.service has failed

-- Defined-By: systemd

-- Support:

--

-- Unit network.service has failed.

--

-- The result is failed.

12月 29 19:31:25 crrchost systemd[1]: Unit network.service entered failed state.

12月 29 19:31:25 crrchost systemd[1]: network.service failed.

12月 29 19:31:25 crrchost polkitd[835]: Unregistered Authentication Agent for unix-process:6669:319312(system bus name:1.263, object path/org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8)(d

3.systemctl status network.service查看如下:

● network.service- LSB: Bring up/down networking

  Loaded: loaded(/etc/rc.d/init.d/network; bad; vendor preset: disabled)

  Active: failed(Result: exit-code) since六 2018-12-29 18:38:17 CST; 1min 24s ago

   Docs: man:systemd-sysv-generator(8)

  Process: 909 ExecStart=/etc/rc.d/init.d/network start(code=exited, status=1/FAILURE)

12月 29 18:38:06 crrchost systemd[1]: Starting LSB: Bring up/down networking...

12月 29 18:38:06 crrchost network[909]:正在打开环回接口: [ 确定  ]

12月 29 18:38:06 crrchost network[909]:正在打开接口 enp7s0:

12月 29 18:38:12 crrchost network[909]:正在确定 enp7s0的 IP信息...失败:…?

12月 29 18:38:12 crrchost network[909]: [失败]

12月 29 18:38:17 crrchost network[909]:正在打开接口 enp8s0: [ 确定  ]

12月 29 18:38:17 crrchost systemd[1]: network.service: control process exi...=1

12月 29 18:38:17 crrchost systemd[1]: Failed to start LSB: Bring up/down n...g.

12月 29 18:38:17 crrchost systemd[1]: Unit network.service entered failed...e.

12月 29 18:38:17 crrchost systemd[1]: network.service failed.

Hint: Some lines were ellipsized, use-l to show in full.

1.参考网络方法停用NetworkManager,依旧报错

   systemctl stop NetworkManager

    systemctl disable NetworkManager

2.比对两个网卡的MAC地址和配置文件的MAC地址

   a.查看mac地址配置,ipconfig

   b.查看配置文件中的macd地址是否匹配,ifcfg-enp8s0和ifcfg-enp7s0,

    按照网络方法增加一行HWADDR=ipconfig查询到的对应网卡MAC地址;

   c.重启network服务依旧报错;

3.通过GUI界面查看网络,提示“系统的网络服务与此版本的网络管理器不兼容”

  这与之前停掉NetworkManager有关,此处不表;

4.因为ifcfg-enp7s0实际上没有插网线,修正其配置文件如下:

   ONBOOT=no

  重新启动服务后网络正常;

5.检查网络

1.network和NetworkManager不同,通过界面和通过配置文件,可能会导致配置混乱,且NetworkManager有些程序不支持,需要停用;

2.BOOTPROTO=none虽然可以表示静态ip,但是如果要启用,必须设置其为

BOOTPROTO=static或BOOTPROTO=dhcp

3.一个网卡没哟被启用,也就是没有设置动态ip或静态ip,是无法被初始化的,不能设置ONBOOT=yes

In Centos7.0 disabling NetworkManager will leave a dhcp client running configured for NetworkManager. This causes the error message RTNETLINK answers: File exists when the network service is started.

The stale dhclient process has the additional"benefit" that when the lease expires your dhclientwill choke, since it cannot reach NetWorkManager, thus removing your IP address.

If you grep for it, you will see that it points to a NetWorkManager configuration file.

[root@host~]# ps-ef| grep dhc

root    1865  792  0 Apr28?     00:00:00/sbin/dhclient-d-sf\

/usr/libexec/nm-dhcp-helper-pf/var/run/dhclient-eno1.pid-lf\

/var/lib/NetworkManager/dhclient-c96e56d3-a4c9-4a87-85ca-93dc0ca268f2-eno1.lease\

-cf/var/lib/NetworkManager/dhclient-eno1.conf eno1

So what you can do is kill the dhclient and only then start your network service.

怎样在CentOS 7.0上安装和配置VNC服务器

1.安装 X-Window

首先我们需要安装 X-Window,在终端中运行下面的命令,安装会花费一点时间。

# yum check-update# yum groupinstall"X Window System"

installing x windows

#yum install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts

install gnome classic session

###设置默认启动图形界面# unlink/etc/systemd/system/default.target# ln-sf/lib/systemd/system/graphical.target/etc/systemd/system/default.target

configuring graphics

# reboot

在服务器重启之后,我们就有了一个工作着的 CentOS 7桌面环境了。

现在,我们要在服务器上安装 VNC服务器了。

2.安装 VNC服务器

现在要在我们的 CentOS 7上安装 VNC服务器了。我们需要执行下面的命令。

# yum install tigervnc-server-y

vnc server

3.配置 VNC

然后,我们需要在/etc/systemd/system/目录里创建一个配置文件。我们可以将/lib/systemd/sytem/vncserver@.service拷贝一份配置文件范例过来。

# cp/lib/systemd/system/vncserver@.service/etc/systemd/system/vncserver@:1.service

copying vnc server configuration

接着我们用自己最喜欢的编辑器(这儿我们用的 nano)打开/etc/systemd/system/vncserver@:1.service,找到下面这几行,用自己的用户名替换掉。举例来说,我的用户名是 linoxide所以我用 linoxide来替换掉:

ExecStart=/sbin/runuser-l<USER>-c"/usr/bin/vncserver%i"PIDFile=/home/<USER>/.vnc/%H%i.pid

替换成

ExecStart=/sbin/runuser-l linoxide-c"/usr/bin/vncserver%i"PIDFile=/home/linoxide/.vnc/%H%i.pid

如果是 root用户则

ExecStart=/sbin/runuser-l root-c"/usr/bin/vncserver%i"PIDFile=/root/.vnc/%H%i.pid

configuring user

好了,下面重启 systemd。

# systemctl daemon-reload

最后还要设置一下用户的 VNC密码。要设置某个用户的密码,必须要有能通过 sudo切换到用户的权限,这里我用 linoxide的权限,执行“su linoxide”就可以了。

# su linoxide$ sudo vncpasswd

setting vnc password

确保你输入的密码多于6个字符

4.开启服务

用下面的命令(永久地)开启服务:

$ sudo systemctl enable vncserver@:1.service

启动服务。

$ sudo systemctl start vncserver@:1.service

5.防火墙设置

我们需要配置防火墙来让 VNC服务正常工作。

$ sudo firewall-cmd--permanent--add-service vnc-server$ sudo systemctl restart firewalld.service

allowing firewalld

现在就可以用 IP和端口号(LCTT译注:例如 192.168.1.1:1,这里的端口不是服务器的端口,而是视 VNC连接数的多少从1开始排序)来连接 VNC服务器了。

6.用 VNC客户端连接服务器

好了,现在已经完成了 VNC服务器的安装了。要使用 VNC连接服务器,我们还需要一个在本地计算机上安装的仅供连接远程计算机使用的 VNC客户端。

阅读剩余
THE END