我有一个Dockerfile,用于基于以下基本Docker映像对基于Python Flask的微服务进行容器化: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在启动时(容器启动时)的某些内容覆盖了 my 的更改。我还没有弄清楚,但是我真的想通过自己的更改来掩盖nginx.conf
。
即使连接到容器并手动覆盖Nginx的配置-然后使用docker commit
将这些更改提交到容器也会失败。我怀疑关于Docker的COPY
命令的工作方式或docker commit
的工作方式我尚不了解-有什么想法/建议吗?
注释#1 -我无法使用单独的Nginx配置文件(每个these instructions)来获得与server_name
一起使用的自定义certbot
字段。我能够获得certbot
来选择正确的server_name
的唯一方法是破坏和覆盖默认的nginx.conf
,因此采用这种方法。也许我只是错误地使用了自定义Nginx配置文件-对该注释的任何建议将不胜感激-但我之前走过那条路,但没有成功。
注释#2 -我能够在运行 的容器上运行certbot
(在附加并覆盖Nginx的配置之后),并且效果很好-SSL在我的容器上很棒-直到容器停止并重新启动。然后,一切都消失了,我需要覆盖Nginx的配置并再次运行certbot
-一点都不理想。
答案 0 :(得分:1)
您不应覆盖默认的nginx.conf
文件(请参见https://github.com/tiangolo/uwsgi-nginx-flask-docker#customizing-nginx-configurations)。
但是,您仍然可以在/etc/nginx/conf.d/
内的单独文件中添加自己的配置,这对于大多数用例来说已经足够了。
编辑:
如果这样不起作用,则可以修改entrypoint.sh
以更好地满足您的需求,因为此处已设置nginx.conf
。此问题包含更多信息:https://github.com/tiangolo/uwsgi-nginx-flask-docker/issues/39