gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:12:09 25 4
gpt4 key购买 nike

我有一个 Dockerfile,用于容器化基于 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 - 我无法获得自定义 server_namecertbot 的现场合作使用单独的 Nginx 配置文件(每 these instructions)。我能够获得的唯一方法 certbot拿起右边 server_name已经通过破坏和覆盖默认值 nginx.conf ,因此采用这种方法。也许我只是错误地使用了自定义 Nginx 配置文件 - 任何关于该笔记的建议将不胜感激 - 但我之前已经走上了这条路并且没有成功。

注释 #2 - 我可以运行 certbot在正在运行的容器上(在附加和覆盖 Nginx 的配置之后),这很好用 - 我的容器上的 SSL,很棒 - 直到容器停止并重新启动。然后一切都消失了,我需要覆盖 Nginx 的配置并运行 certbot再次 - 根本不理想。

最佳答案

你不应该覆盖默认 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

关于Dockerfile COPY 不覆盖 Nginx 配置(或 Nginx 在容器启动时覆盖)-为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51382993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com