【发布时间】:2018-04-14 08:38:37
【问题描述】:
我有一个运行 CentOS6.7 的 vagrant-box,我在其上运行 docker 容器。我打算在容器内运行由 nginx 提供的烧瓶应用程序。我必须在 nginx.conf 文件中进行某些更改,以通过 nginx 为我的应用程序(app1)提供服务。这可能看起来有点奇怪,但我无法更改 /etc/nginx/conf.d/nginx.conf 中的 nginx.conf 文件
这是我所做的:
方法一: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;
}
}
注意上面服务器块中的位置从location / 到location /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 - 下面提到的第二种方法。
方法二: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 中持续存在
我做错了什么?
更新 Github 仓库:https://github.com/VimanyuAgg/flask-nginx.git
【问题讨论】:
-
对此更新:我删除了 COPY ./changes/nginx.conf /etc/nginx/conf.d/nginx.conf 并添加了 RUN rm /etc/nginx/conf.d/nginx。 conf 但是在容器创建之后,nginx.conf 仍然在 /etc/nginx/conf.d/nginx.conf 里面!
标签: docker nginx flask vagrant