代码之家  ›  专栏  ›  技术社区  ›  Rob

dockerfile copy不覆盖nginx配置(或nginx在容器启动时覆盖)-为什么?

  •  3
  • Rob  · 技术社区  · 6 年前

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

    原因是我想运行让我们加密 certbot 实用程序强制nginx仅在容器内为ssl。

    问题是: Docker拒绝覆盖 nginx.conf文件 . 它几乎拒绝把我尝试的任何东西 /etc/nginx/conf.d/ .

    或者是码头工人 覆盖它,但nginx中的某些内容在开始时(在容器开始时)覆盖 我的 变化。我还没弄清楚,但我真的很想把它打倒 nginx.conf文件 用我自己的改变。

    甚至附加到容器并手动覆盖nginx的配置,然后使用 docker commit 失败。我怀疑有件事我不明白Docker是怎么做到的 COPY 命令有效或如何 Docker提交 工作-有什么想法/建议吗?

    注1 -我没法习惯 服务器名称 现场工作 认证机器人 使用单独的nginx配置文件(根据 these instructions )我唯一能得到的 认证机器人 去接右边的 服务器名称 已通过删除并覆盖默认值 nginx.conf文件 因此采用这种方法。也许我只是错误地使用了自定义的nginx配置文件——任何关于这个注释的建议都会非常感谢——但是我以前就已经走上了这条路,而且没有成功。

    注2 -我能跑了 认证机器人 在一 正在运行 容器(在附加和覆盖nginx的配置之后),这很好——在我的容器上使用ssl,太棒了——直到容器停止并重新启动。然后全部清除,我需要覆盖nginx的配置和运行 认证机器人 再说一遍-一点也不理想。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Jacob Sievers Semur Nabiev    6 年前

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