zoukankan      html  css  js  c++  java
  • 使用 Dockerfile 自定义 Nginx 镜像

    一般来说,自定义Nginx只需要把静态文件放到镜像里就可以了,不需要重写 CMDENTRYPOINT。但是,如果的确需要在 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的参数而言必须是一个整体。

  • 相关阅读:
    图解插入排序--直接插入排序
    在项目中代替DevExpress(一)
    java web servlet
    一元夺宝项目设计(上)
    一元夺宝项目设计(中)
    一元夺宝项目设计(下)
    ORM之四:调用入口与调用示例
    ORM之三:DbProvider与DbFactory
    ORM之二:核心接口与扩展操作
    ORM之一:适合我的ORM
  • 原文地址:https://www.cnblogs.com/hellxz/p/15252876.html
Copyright © 2011-2022 走看看