Docker:如何搭配docker-compose.yml使用Dockerfile自定义Nginx服务
问题根因分析
- 首次使用
debian:buster-slim作为基础镜像的问题:原项目的Nginx镜像预先配置了WordPress所需的站点规则、fastcgi参数、启动脚本,纯Debian镜像无预装Nginx也无对应配置,自然无法启动。 - 改用
nginx:latest作为基础镜像的问题:原项目使用的是定制化Nginx镜像,官方裸Nginx镜像缺少和WordPress、PHP服务联动的预设配置,且未保留原镜像的前台启动命令,容器启动后无持续运行的前台进程会直接退出,导致循环重启。 - 配置耦合问题:直接修改原仓库的
docker-compose.yml、在仓库根目录放置Dockerfile,都会和原项目代码混在一起,后续拉取原仓库更新时会产生冲突。
解决方案(自定义配置与原项目代码完全分离)
1. 目录结构调整
├── wordpress-nginx-docker/ # 原仓库代码,全程不做任何修改 └── custom-config/ # 独立存放你的自定义配置,可单独做版本管理 ├── docker-compose.override.yml └── nginx └── Dockerfile
2. 编写Nginx自定义Dockerfile
基于原项目的Nginx镜像做扩展,保留所有原有配置的同时安装所需工具:
# 直接使用原项目配套的Nginx镜像作为基础,不要替换为其他镜像 FROM mjstealey/wordpress-nginx:latest RUN apt update \ && apt install -y --no-install-recommends openssl vim \ && rm -rf /var/lib/apt/lists/*
3. 编写docker-compose覆盖配置
新建docker-compose.override.yml实现无侵入修改原配置,不需要改动原仓库的任何文件:
version: '3' services: nginx: build: ./nginx # 覆盖原端口配置,按需调整本地映射端口即可 ports: - "8080:80" - "443:443"
4. 服务启动操作
两种启动方式二选一即可:
- 显式指定合并两个配置文件启动:
# 在custom-config目录下执行 docker-compose -f ../wordpress-nginx-docker/docker-compose.yml -f docker-compose.override.yml up -d - 软链接原配置文件到自定义目录,后续可直接启动:
ln -s ../wordpress-nginx-docker/docker-compose.yml ./docker-compose.yml docker-compose up -d
效果验证
- 执行
docker-compose ps确认Nginx容器状态为Up - 执行
docker-compose exec nginx vim --version、docker-compose exec nginx openssl version验证工具安装成功 - 访问本地映射端口确认WordPress服务正常运行
内容的提问来源于stack exchange,提问作者dot
相关产品推荐
相关产品推荐

