基于CentOS8创建Apache服务镜像-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、构建过程中遇到的问题

    1. 容器运行时报错

AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 172.17.0.4. Set the ‘ServerName’ directive globally to suppress this message

解决方案需要在Dockerfile文件中暴露端口80或者将apache配置文件的#ServerName www.example.com:80注释取消

EXPOSE 80
或者
RUN sed -i 's/#ServerName www.example.com:80/ServerName localhost:80/g' /etc/httpd/conf/httpd.conf
    1. 构建过程中yum下载Apache服务错误

Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist

问题原因是2020 年 12 月 8 号CentOS 官方宣布了停止维护 CentOS Linux 的计划并推出了 CentOS Stream 项目CentOS Linux 8 作为 RHEL 8 的复刻版本生命周期缩短于 2021 年 12 月 31 日停止更新并停止维护EOL更多的信息可以查看 CentOS 官方公告。如果需要更新 CentOS需要将镜像从 mirror.centos.org 更改为 vault.centos.org
解决方案在Dockerfile中构建时修改镜像源

RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum clean all && yum makecache
    1. 由于Dockerfile文件中最后CMD命令错误导致容器起不来

具体Dockerfile关于CMD命令的说明请参考

二、构建过程

具体Dockerfile文件

FROM centos
RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum clean all && yum makecache
RUN yum -y install httpd
EXPOSE 80
# RUN sed -i 's/#ServerName www.example.com:80/ServerName localhost:80/g' /etc/httpd/conf/httpd.conf
ADD news.tar.gz /var/www/html/
RUN mv /var/www/html/news/* /var/www/html/
COPY start.sh /start.sh
RUN chmod 775 /start.sh
CMD ["sh","-c","/start.sh"]

start.sh文件

#/bin/bash
/usr/sbin/httpd -D FOREGROUND

这里必须使用http指令启动systemctl在container中是不允许使用的。并且加入参数-D FOREGROUND保持apache运行在前台因为Docker容器仅在它的1号进程PID为1运行时会保持运行。如果1号进程退出了Docker容器也就退出了。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: centos