我有一个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