Swagger express在Docker容器中给出了错误

我有一个使用swagger-express-mw库的应用程序,我以下面的方式启动我的应用程序:

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

一切工作正常我的本地OSX机器上。 但是当我使用boot2docker从我的应用程序构build图像并运行它时,出现以下错误:

 /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"] 

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

谢谢!

你的问题似乎是你的docker容器或机器设置有问题。 该错误不是docker错误,这是一个JavaScript错误。

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

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

你可以在这里使用build议testing严格模式: 有什么办法来检查严格模式是否被强制执行? 。

所以,总之:你的问题不是一个docker问题,而是JavaScript环境以不同的严格模式运行的问题。 你如何解决这个问题将取决于严格的定义。

希望有所帮助!