Node.js 为什么我的官方Ghost.org Docker容器在我刷新浏览器后仍提供旧内容,即使Ghost/Node处于开发模式?

Node.js 为什么我的官方Ghost.org Docker容器在我刷新浏览器后仍提供旧内容,即使Ghost/Node处于开发模式?,node.js,nginx,docker,ghost,Node.js,Nginx,Docker,Ghost,在为基于docker/ghost.org博客的站点设置完整的生产CI管道之后,我尝试设置本地开发环境,以更快地开发主题,但是ghost在“开发模式”下运行,并且在传递“NODE_ENV=development”时,在浏览器刷新时看不到更改 我正在本地运行官方的Ghost Docker容器(),Ghost正确地处于开发模式,对本地主机代码所做的更改(通过-v volumes标记通过管道传输到Docker容器)在浏览器刷新时不可见 背景故事 由于我最初是在ghost容器前面运行一个NGinx反向代理

在为基于docker/ghost.org博客的站点设置完整的生产CI管道之后,我尝试设置本地开发环境,以更快地开发主题,但是ghost在“开发模式”下运行,并且在传递“NODE_ENV=development”时,在浏览器刷新时看不到更改

我正在本地运行官方的Ghost Docker容器(),Ghost正确地处于开发模式,对本地主机代码所做的更改(通过-v volumes标记通过管道传输到Docker容器)在浏览器刷新时不可见

背景故事 由于我最初是在ghost容器前面运行一个NGinx反向代理,我开始尝试调优我的NGinx.conf文件,因为我假设问题是基于缓存的

我在nginx.conf中添加了以下内容,以尝试禁用本地ghost.org博客上的所有缓存,以确保我没有缓存我的页面:

expires off;
我了解到Docker/NGinx反向代理在与virtualbox()相关的sendfile方面存在一些问题,因此我将sendfile设置为off:

sendfile off;
当上述操作无效时,我完全删除了本地开发设置的反向代理(试图缩小可能出现的问题)。我认为这可以解决问题,并允许浏览器刷新以显示我的本地更改,但事实并非如此

NGinx反向代理被删除后 此时,我只运行官方的ghost docker映像(前面没有反向代理)

很明显,问题在于ghost,所以我的第一个冲动是ghost在“生产模式”下运行,尽管ghost在启动结束时说它在“开发模式”下运行。为了确保它在开发模式下运行,我从config.js ghost配置文件中删除了“Production”块选项(如果ghost确实在生产模式下,这将导致ghost出错)

我还在配置文件的开头添加了一个echo语句,这样当Ghost启动时,它将回显NODE_ENV的当前值(以确保正确设置为development)

使用以下工具卸下容器:

docker rm ghost -f 
docker exec -it ghost bash
并成功地重新运行它,ghost响应“NODE_ENV=development”并启动,但仍然看不到更改

容器内的代码更改是否在更改? 我的下一个想法是,我的更改可能没有做任何事情/被传递到我的docker容器中。因此,我将docker exec-它与以下内容一起放入容器:

docker rm ghost -f 
docker exec -it ghost bash
我在容器内部安装了vim,然后打开其中一个ghost文件来验证源代码,然后退出vim而不保存。然后我在本地主机上修改了文件并保存了它

当我从Ghost容器中重新打开同一文件时,我能够成功地查看我的更改,从而证明本地主机上基于卷的文件正确地进入Ghost容器,并且应该能够通过浏览器刷新来提供/查看/更新,因为Ghost处于开发模式

尝试其他容器? 接下来,我尝试了Docker Hub中的另一个容器(即使更改此容器意味着我必须更改生产管道以同步所有备份)

我搜索了Docker hub,找到了两个最流行的Ghost.org Docker替代容器,然后将它们拉下来进行测试:

docker拉力ptimof/ghost/(2.9k拉力)

docker拉力金/鬼/(1.9k拉力)]

显然,大多数人使用100多万次拉取的官方ghost docker图像,因此我不相信这会有任何影响,但是在查看gold/ghost和ptimof/ghost的Dockerfile时,都引用了对以下行中权限的修改:

RUN chown -R user $GHOST_SOURCE/content
上面的内容似乎引用了生产ghost博客,然后修改了内容子目录的权限,该目录应包含主题文件夹和我的代码更改。在这一点上,我有点希望,但遗憾的是,在用每个替代容器替换官方容器(尽管DockerFile看起来完全相同)之后,问题仍然存在

另一个版本的鬼? 我最后一次尝试的是设计出一个较旧版本的ghost,因为我认为它可能是最新发布的容器中的一个问题,我尝试了两个以前的版本,但没有任何影响

你是来救援的吗? 因为我想不出还有什么可以尝试的,所以我想在继续我自己的搜索之前,我会在这里发帖子,希望有更多鬼经验、更多码头工人经验(希望两者都有)的人会偶然找到答案

我使用的docker run命令是

docker run --env NODE_ENV=development --name ghost -d -p 80:2368 -v ~/blog/ghost-letsencrypt/config/config dev.js:/usr/src/ghost/config.example.js -v ~/blog/ghost-letsencrypt/themes/:/usr/src/ghost/content/themes ghost:0.11.3

重新说明问题:一切正常,我的本地ghost docker容器按预期成功连接到远程mysql DB。我的站点在“按浏览器”中可见并正确显示,但当我更改本地代码时,容器重新启动或浏览器刷新都不会显示任何这些更改。

在浏览器刷新时不会正确显示对本地代码库的更改,因为卷正在映射到/src/(源)目录,而不是/var/lib/ghost工作目录

重影文件结构 基本上,ghost博客(在容器内或其他地方)有两个相同的文件结构,都可以包含主题/博客内容。源目录和工作目录

第一个位于以下目录中:/usr/src/ghost/

此目录包含基本源ghost文件,如果在工作目录中找不到其他主题/配置文件,则这些文件仅在博客启动期间使用/复制到工作目录

默认配置将位于:/usr/src/ghost/Config.example.js中

默认主题将位于:/usr/src/ghost/content/Themes中

本质上,/src源目录类似于模板t