基于Ubuntu20.04 Docker镜像安装WordPress后宿主机8081端口无法访问
问题排查与修复方案
核心问题定位
- systemd 不兼容Docker容器环境:Ubuntu 20.04基础镜像默认不会启动systemd,构建阶段执行的
systemctl reload apache2完全无效,容器启动后也没有自动拉起Apache服务,80端口没有进程监听,自然宿主机访问无响应。 - 缺失容器启动命令:原Dockerfile没有指定
CMD或ENTRYPOINT,容器启动后没有前台运行的进程,即使容器状态显示running,内部也没有服务对外提供响应。 - Apache配置文件不完整:原
wordpress.conf缺少</VirtualHost>闭合标签,Apache启动时会直接报错。 - 额外提示:当前方案没有配置WordPress依赖的数据库,也没有生成
wp-config.php配置文件,Apache启动后WordPress也无法正常运行,后续需要补充对应配置。
修复后的配置
1. 修正wordpress.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html/wordpress ServerName localhost <Directory /var/www/html/wordpress> AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
2. 修正Dockerfile
移除无用的systemd、sudo依赖,新增Apache前台启动命令:
FROM ubuntu:20.04 as baseimage SHELL ["/bin/bash", "-c"] ARG DEBIAN_FRONTEND=noninteractive # 安装必要依赖,使用SQLite则把php-mysql替换为php-sqlite3 RUN apt update && apt install -y wget tar curl php libapache2-mod-php php-mysql RUN wget -c http://wordpress.org/latest.tar.gz RUN tar xzvf latest.tar.gz -C /var/www/html RUN chown -R www-data:www-data /var/www/html/wordpress FROM baseimage as wordpressapp COPY wordpress.conf /etc/apache2/sites-available/ WORKDIR /etc/apache2/sites-available RUN a2ensite wordpress.conf RUN a2dissite 000-default.conf # 开启Apache重写模块 RUN a2enmod rewrite EXPOSE 80 # 前台启动Apache作为容器主进程 CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
构建与运行
- 构建命令:
sudo docker build -t wordpress:1.0 -f ./wordpress2_ms.dockerfile --target wordpressapp ./context/ - 运行命令:
sudo docker run -td --name wordpress_cont -p 8081:80 wordpress:1.0
运行后可执行docker exec -it wordpress_cont ss -tunlp验证80端口是否被Apache正常监听,确认后宿主机访问127.0.0.1:8081即可进入WordPress初始化页面。如果需要实现无独立数据库运行,需额外配置WordPress适配SQLite即可。
内容的提问来源于stack exchange,提问作者B.J
相关产品推荐
相关产品推荐

