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环境以不同的严格模式运行的问题。 你如何解决这个问题将取决于严格的定义。
希望有所帮助!