官网上说Systemd已经集成到最新的centos:7和centos:latest的基础镜像里面了,但是默认并没有启用。
所以许多小伙伴不能直接使用Systemctl来开启一些服务,这个非常让人捉急,许多小伙伴根本不知道怎么解决。
下面就简单说一下如何解决这个问题:
首先,根据官网的提示,编写整理适合自己的Dockerfile文件,内容如下:
#centos with systemctl\ssh\...
FROM centos
ENV container docker
MAINTAINER Eli Kang <3296189956@qq.com>
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/*;
RUN yum -y install net-tools
RUN yum -y install iproute
RUN yum -y install vim-enhanced
RUN yum -y install sudo passwd
RUN yum -y install iptables
RUN yum -y install openssl openssh-server
RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
RUN ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
RUN sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
RUN sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
RUN sed -i "s/#Port.*/Port 20022/g" /etc/ssh/sshd_config
RUN echo "root:123456" | chpasswd
EXPOSE 20022
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
配置文件已经带上了一些常用的工具,如果有其他需要可以自行添加。
镜像需要以在后台运行,可以通过ssh进行连接,为了避免冲突,镜像的ssh端口已经修改为了20022.
默认的root密码已经修改为了123456,如有需要可以自行修改。
运行的时候需要以如下方式运行容器:
docker run --privileged -dti -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 20022:20022 local/centos_ssh
然后就可以通过ssh连接镜像了,访问的IP就是docker容器所在host的IP。
连接之后的centos就可以使用systemctl了,赶快试一试吧!
本文由elikang整理,鉴于本人知识能力的不足,本文许多欠缺之处,欢迎讨论指正。
欢迎加QQ群讨论 :云计算- 532524739 ,聚焦docker && openstack。群里会不断分享有关云计算的资料。