docker – 无法更改nginx.conf文件

我有一个运行CentOS6.7的流浪盒,我正在运行Docker容器.我打算在容器内运行由Nginx提供的烧瓶应用程序.我必须在Nginx.conf文件中进行某些更改,以便通过Nginx为我的应用程序(app1)提供服务.这看起来有点奇怪,但我无法更改/etc/Nginx/conf.d/Nginx.conf中的Nginx.conf文件

这是我做的:

方法1:更改Dockerfile

我的Dockerfile看起来像这样:

FROM tianGolo/uwsgi-Nginx-flask:flask
copY ./app /app
copY ./changes/Nginx.conf /etc/Nginx/conf.d/Nginx.conf
copY ./changes/Nginx.conf /app/

./changes/Nginx.conf看起来像这样:

server {
    location /app1/ {
        try_files $uri @app;
    }
    location @app {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi.sock;
    }
    location /static {
        alias /app/static;
    }
}

请注意上述服务器块中位置/位置/ app1 /的位置变化

在构建映像并运行docker容器之后,我执行到正在运行的容器中

sudo docker exec -ti CONTAINER_ID /bin/bash

cat /app/Nginx.conf显示更新的Nginx.conf文件(位置从/到/ app1 /更改)

但cat /etc/Nginx/conf.d/Nginx.conf仍显示旧的conf文件(位置仍为/)
我想也许第二个copY行没有成功执行并且docker没有在控制台上抛出错误(sudo?).所以,我手动更改了conf文件,并进行了一个docker commit – 下面提到的第二种方法.

方法2:Docker提交

在docker容器启动并运行之后,我使用exec登录容器

[vagrant@localhost]$sudo docker exec -ti CONTAINER_ID /bin/bash

[root@CONTAINER_ID]# vi /etc/Nginx/conf.d/Nginx.conf

更改文件以反映如下:

server {
    location /app1/ {
        try_files $uri @app;
    }
    location @app {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi.sock;
    }
    location /static {
        alias /app/static;
    }
}

保存文件wq!并退出容器.
之后我做了sudo docker commit CONTAINER_ID my_new_image

启动一个新容器并重新登录到my_new_image上运行的容器,仍然会在/etc/Nginx/conf.d/Nginx.conf中提供以下Nginx.conf文件

server {
    location / {
        try_files $uri @app;
    }
    location @app {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi.sock;
    }
    location /static {
        alias /app/static;
    }
}

我可以说my_new_image有一些变化,因为它的大小比tianGolo / uwsgi-Nginx-flask-docker大,因为我已经安装了vim来编辑文件.但在/etc/Nginx/conf.d/Nginx.conf中,文件更改不会持续存在

我究竟做错了什么?

UPDATE
Github回购:https://github.com/VimanyuAgg/flask-nginx.git

解决方法:

事实证明,父图像已经将特定文件添加到图像中,该文件是只读的.这意味着您遗憾地无法更改或覆盖该文件.

一个hacky解决方案是将/etc/Nginx/conf.d文件夹挂载到主机上的目录(比如/usr/local/share / Nginxconf)并更改那里的文件,该文件位于另一个命名空间和不同的权限中(据我所知).它起作用了我的结局.

docker create -v /usr/local/share/Nginxconf:/etc/Nginx/conf.d --name flask-test IMAGE_NAME

vim /usr/local/share/Nginxconf/Nginx.conf

一个更好的解决方案是采用另一个父图像,它不会事先添加文件.但我不知道你的应用程序需要什么依赖项,所以这可能是一个痛苦的搜索.您当然也可以创建自己的(这也可以为您提供编写Dockerfiles的培训).

编写成功的Dockerfile的参考:

Dockerfile Reference

Dockerfile Best Practices

Handy tutorial to dockerize PostreSQL by Docker

相关文章

Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一...
本地项目配置 1 复制 luffy/settings/dev.py为prop.py 修改l...
nginx不仅可以隐藏版本信息,还支持自定义web服务器信息 先看...
一 、此次漏洞分析 1 nginx HTTP/2漏洞 [nginx-announce] ng...
###进入nginx 目录cd /usr/local/nginx###递归显示 2 级目录...
在cmd命令窗口输入下面命令进行查看 tasklist /fi "ima...