2016-03-08 93 views
0

内的错误,我有一个使用swagger-express-mw库的应用程序,我开始我的应用程序的方式如下:扬鞭快递给搬运工容器

SwaggerExpress.create({ appRoot: __dirname }, (err, swaggerExpress) => { 
// initialize application, connect to db etc... 
} 

一切正常,我的本地OSX机器上的罚款。但是当我使用boot2docker从我的应用程序建立形象并运行它,我得到以下错误:

/usr/src/app/node_modules/swagger-node-runner/index.js:154 
config.swagger = _.defaults(readEnvConfig(), 
      ^

TypeError: Cannot assign to read only property 'swagger' of [object Object] 

我dockerfile看起来像这样(没有什么特别):

FROM node:latest 

RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

COPY package.json /usr/src/app/ 

RUN npm set progress=false 
RUN npm install 

COPY . /usr/src/app 

EXPOSE 5000 

CMD ["npm", "run", "dev"] 

有其他人遇到类似的情况下,当地的环境工作,但应用程序在码头集装箱内抛出一个错误?

谢谢!

回答

1

您的问题似乎是您的码头容器或机器设置有问题。错误不是码头错误,这是一个JavaScript错误。

Docker容器似乎在严格模式下运行JavaScript模块,您无法在其中分配给只读对象属性(https://msdn.microsoft.com/library/br230269%28v=vs.94%29.aspx)。在你的OSX主机上,根据我们有限的信息,它看起来没有在严格模式下运行。

有几种方法可以指定脚本的“严格性”。我已经看到你可以用一个标志--use_strict来启动Node.js,但我不确定那是多么可靠。可能是NPM安装了不同版本的依赖模块,而在不同的版本中,它们为严格模式指定了不同的规则。还有其他几种方法可以将您的功能,模块或应用程序的“严格性”定义为一个整体。

您可以使用这里的建议测试严格模式:Is there any way to check if strict mode is enforced?

总而言之:您的问题不是继承性的docker问题,但它是一个问题,因为您的javascript环境以不同的严格模式运行。你如何解决这个问题将取决于严格的定义。

希望有帮助!

+0

这是一个与我的npm安装问题,我使用的是最新版本,它是在一个扁平的层次结构中安装所有模块。当我使用--legacy-bundling选项时,它起作用了。 – Alistair