2016-03-08 107 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