Swagger express在docker容器中给出错误

时间:2016-03-08 16:33:52

标签: node.js docker swagger

我有一个使用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"]

是否有其他人遇到类似的情况,当地环境有效,但应用程序在docker容器内引发错误?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的问题似乎与Docker容器或计算机设置有关。该错误不是docker错误,这是一个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?

所以,总结一下:你的问题不是继承问题,而是你的javascript环境以不同的严格模式运行这个问题。你如何解决这个问题取决于定义严格的地方。

希望有所帮助!