Nginx 如何在映像中设置默认文件,以便在容器运行期间覆盖该文件?

Nginx 如何在映像中设置默认文件,以便在容器运行期间覆盖该文件?,nginx,docker,Nginx,Docker,如何在容器运行期间使用-v选项(或其他选项)覆盖默认配置文件(在构建期间复制到映像中) 详细信息: 假设Dockerfile中有以下指令: COPY nginx.conf /etc/nginx/nginx.conf VOLUME ["/etc/nginx/nginx.conf"] 如果没有指定(单个文件)卷,我希望nginx使用复制的nginx.conf,就像默认配置一样,始终在映像中。 若我指定卷,容器将使用提供的配置文件,而不是复制到映像 所以主要的想法是使用我可以覆盖的默认配置 当然,下

如何在容器运行期间使用-v选项(或其他选项)覆盖默认配置文件(在构建期间复制到映像中)

详细信息:

假设Dockerfile中有以下指令:

COPY nginx.conf /etc/nginx/nginx.conf
VOLUME ["/etc/nginx/nginx.conf"]
如果没有指定(单个文件)卷,我希望nginx使用复制的nginx.conf,就像默认配置一样,始终在映像中。 若我指定卷,容器将使用提供的配置文件,而不是复制到映像

所以主要的想法是使用我可以覆盖的默认配置


当然,下面的解决方案不起作用,并且给出了一个错误。但也许你知道如何实现类似的行为

如果从
Dockerfile
中删除
部分,应该可以使用。然后,您可以在运行容器时覆盖默认配置文件

因此,在您的
Dockerfile
中,只需输入以下内容:

COPY nginx.conf /etc/nginx/nginx.conf
然后,在运行容器时,将配置更改映射到本地文件:

docker run -v ./nginx.conf:/etc/nginx/nginx.conf:ro ...

这将允许您提供默认配置,但也允许您在需要时覆盖它。

您的
指令将删除您刚才使用
复制
复制的内容。在我看来…不,docker将在映像构建期间引发错误:
步骤20/25:VOLUME/etc/nginx/nginx.conf无法在现有文件上装载卷,文件存在
您可以在其上放置另一层,然后再次使用所需的配置复制nginx.conf/etc/nginx/nginx.conf。可能的副本作为答案发布,请参阅下文。很高兴听到它起作用了!