我有一个使用docker-compose
在docker容器中运行的应用程序,由nginx提供服务。前端脚本使用gulp
编译到build.js
文件中。
第一次调出docker容器时,build.js
没有问题。大多数时候构建文件是重新创建的(我在开发期间不断重建),Chrome在\u0
的末尾找到一串build.js
个字符,导致它抛出错误Uncaught SyntaxError: Invalid or unexpected token
。
有时,当重新创建build.js
时,服务于浏览器的build.js
版本中会缺少一些字符:
build.js
,本地版本:
var AnalyticsMixin = require('../mixins/AnalyticsMixin.vue');
build.js
,浏览器版
var AnalalyticsMixin.vue');
这是文件末尾重复的\u0
长字符串的补充。
我还有gulp
任务缩小build.js
并将内容的哈希值附加到文件名(文件名随每次新保存而变化)。这里的每个新文件都不会引发错误。
在另一种可能的转折中,当我们从一个烧瓶后端移动到一个炮弹时,这个问题只是它的头部。
这些字符似乎不在文件本身中 - 我在Chrome中的检查窗口中看到的版本比我的本地文件长一行。
根据建议here,我尝试在sendfile off;
中设置nginx.conf
。什么都没有改变。
这可能与我的docker-compose
设置有关吗? nginx中的其他东西?
这是加载build.js
(或缩小版本)的文件。该文件的名称在两个评论index.html
和inject:js
之间通过gulp注入endinject
的index.html:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
</head>
<body>
<div id="app" ><router-view></router-view></div>
<!-- inject:js -->
<script src="/js/build.js"></script>
<!-- endinject -->
</body>
</html>
答案 0 :(得分:0)
我最终通过为开发和生产创建单独的Dockerfile
来解决这个问题 - 开发用的是使用flask的服务器。 gunicorn
似乎是罪魁祸首,但只有在重新创建时才会出现。为build.js
提供新内容,这对于制作来说不是问题。
Dockerfile
仅使用flask的默认开发服务器:
FROM python:3
ENV MODE dev
EXPOSE 8080
RUN apt-get update
RUN apt-get install -y freetds-dev
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /usr/src/app
RUN python3 setup.py install
CMD python3 manage.py dev
Dockerfile_prod
,使用gunicorn服务器
FROM python:3
ENV MODE dev
EXPOSE 8080
RUN apt-get update
RUN apt-get install -y freetds-dev
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /usr/src/app
RUN python3 setup.py install
CMD gunicorn -w 3 -b 0.0.0.0:8080 wsgi
使用Dockerfile_prod
而不是默认Dockerfile
来构建图片:
docker build -f Dockerfile_prod