我尝试在 docker 容器中安装 httpd,并尝试通过 docker 中的 systemctl 重新启动 httpd。但我得到了一个像下面这样的例外
根据我的分析,在 docker 基础镜像中默认未启用 systemctl,专家建议如下配置。
FROM centos:7
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"]
我尝试了同样的方法,但仍然没有运气。我尝试使用centos/systemd作为我的基本映像的另一个选项,但没有运气。这是我正在尝试的示例 docker 文件。
FROM centos:7
RUN yum -y install httpd php php-mysql php-gd mariadb-server php-xml php-intl mysql weget
RUN systemctl restart httpd.service
RUN systemctl enable httpd.service
RUN systemctl start mariadb
RUN systemctl enable mariadb
# RUN mysql -u root -p -u root
EXPOSE 80
有人请给我建议吗?还有其他以不同方式实现相同目标的可能性吗?
参考:
Docker CentOS systemctl 不允许 https://forums.docker.com/t/systemctl-status-is-not-working-in-my-docker-container/9075/2