Dockerfile COPY没有覆盖Nginx配置(或者Nginx在容器启动时覆盖)-为什么



我有一个Docker文件,用于容器化基于Python Flask的微服务,它基于这个基本Docker映像:https://github.com/tiangolo/uwsgi-nginx-flask-docker

在我的Dockerfile中,我添加了一个自定义nginx.conf并覆盖Nginx的:

FROM tiangolo/uwsgi-nginx-flask:python3.6
ADD nginx.conf nginx.conf
COPY ./app /app
COPY ./data /app/data
COPY nginx.conf /etc/nginx/conf.d/

我的自定义nginx.conf只包括一个更改-我用自定义域名准备的单个server_name

server {
listen 80;
location / {
try_files $uri @app;
}
location @app {
include uwsgi_params;
uwsgi_pass unix:///tmp/uwsgi.sock;
}
location /static {
alias /app/static;
}
server_name my-fully-qualified-domain-name.com;
}

原因是我想运行Let's Encrypt的certbot实用程序,以强制Nginx仅在容器中为SSL。

问题:Docker拒绝覆盖nginx.conf。它几乎拒绝将我尝试的任何东西放入/etc/nginx/conf.d/

或者Docker确实覆盖了它,但Nginx中的某个东西在启动时(在容器启动时(覆盖了我的更改。我还没有弄清楚,但我真的想用我自己的改变来打破nginx.conf

即使附加到容器并手动覆盖Nginx的配置,然后使用docker commit将这些更改提交到容器也会失败。我怀疑我对Docker的COPY命令的工作原理或docker commit的工作原理有什么不了解的地方——有什么想法/建议吗?

注意#1-我无法使用单独的Nginx配置文件(根据这些说明(获得使用certbot的自定义server_name字段。我能让CCD_ 13获得正确的CCD_;重写默认的nginx.conf,因此采用这种方法。也许我只是错误地使用了自定义Nginx配置文件——如果有任何建议,我们将不胜感激——但我以前也走过这条路,但没有成功。

注意#2-我能够在运行的容器上运行certbot(在附加和覆盖Nginx的配置之后(,这很好-我的容器上的SSL,很棒-直到容器停止并重新启动。然后一切都被抹去了,我需要覆盖Nginx的配置&再次运行certbot—一点也不理想。

您不应该覆盖默认的nginx.conf文件(请参阅https://github.com/tiangolo/uwsgi-nginx-flask-docker#customizing-nginx配置(。

但是,您仍然可以在/etc/nginx/conf.d/中的一个单独文件中添加自己的配置,这对于大多数用例来说应该足够了。

编辑:

如果这不起作用,您可以修改entrypoint.sh以更好地满足您的需求,因为nginx.conf已设置在那里。本期包含更多信息:https://github.com/tiangolo/uwsgi-nginx-flask-docker/issues/39

最新更新