使用 Dockerfile 自定义 Nginx 镜像

一般来说,自定义Nginx只需要把静态文件放到镜像里就可以了,不需要重写 CMD 与 ENTRYPOINT。但是,如果的确需要在 Nginx 启动前执行一些操作,就需要重写 CMD 了,如果写成下边就样:

FROM nginx
COPY someshell.sh /
RUN chmod +x /someshell.sh
CMD someshell.sh && nginx -g daemon off;

就会得到个错误 nginx: invalid option: "off"。网上很多报这种错误的,今天打镜像时恰巧碰到又忘了之前的作法了,索性记录下来,备忘以及帮助后来者。

提供两种类似的自定义 Nginx 镜像写法,一种放在 Dockerfile 里执行脚本 + 启动 Nginx,另一种是脚本里把所有的事都做完。

仅 Dockerfile 修改
FROM nginx:1.16
#省略复制前端的命令
COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
CMD /docker-entrypoint.sh && nginx -g 'daemon off;'

没看错,只是在 daemon off; 前后加上 单引号。docker-entrypoint.sh 名称及内容均可自定义。

脚本中All in One
Dockerfile:

FROM nginx:1.16
#省略复制前端的命令
COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
CMD /docker-entrypoint.sh


docker-entrypoint.sh:

#!/bin/bash
#做一些操作。。。
nginx -g 'daemon off;'


总结
问题主要出在 daemon off; 对于Nginx的参数而言必须是一个整体。

posted @   牧之丨  阅读(818)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2021-11-23 mybatis-plus逻辑删除不生效的解决办法
2020-11-23 回车、换行、空格的ASCII码值—(附ASCII码表)
2017-11-23 mac下用xattr命令来删除文件的扩展属性
2017-11-23 使用vue.js实现checkbox的全选和多个的删除功能
2016-11-23 【转】Popclip的JSON格式化扩展
2016-11-23 【转】json格式化、高亮库jsonFormater
2016-11-23 Mac OS X El Capitan系统完整性保护System Integrity Protection (SIP)
点击右上角即可分享
微信分享提示