使用 Dockerfile 自定義 Nginx 映象

東北小狐狸發表於2021-09-10

一般來說,自定義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的引數而言必須是一個整體。

相關文章