2016-03-08 5 views
0

У меня есть приложение, которое использует swagger-express-mw библиотеку, и я начинаю мое приложение следующим образом:Кураж экспресс дает ошибку внутри контейнера Docker

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.

Контейнер для докеров, похоже, работает с вашим модулем JavaScript в строгом режиме, в котором вы не можете назначать свойства объекта только для чтения (https://msdn.microsoft.com/library/br230269%28v=vs.94%29.aspx). На вашем хосте OSX, из ограниченной информации, которую мы имеем, похоже, что он не работает в строгом режиме.

Существует несколько способов указать «строгость» ваших сценариев. Я видел, что вы можете запустить Node.js с флагом --use_strict, но я не уверен, насколько это надежный. Возможно, NPM установил другую версию зависимых модулей, а в другой версии они задают разные правила для строгого режима. Существует несколько других способов определения «строгости» вашей функции, модуля или приложения в целом.

Вы можете протестировать жесткий режим, используя предложения здесь: Is there any way to check if strict mode is enforced?.

Итак, вкратце: ваша проблема не наследует проблему докера, но это проблема с тем, что ваши среды javascript работают в разных строгих режимах. Как вы это исправите, это будет зависеть от того, где определяется строгий.

Надеюсь, что это поможет!

+0

Это была проблема с моей установкой npm, я использовал самую новую версию и устанавливал все модули в плоской иерархии. Когда я использовал опцию -legacy-bundling, она работала. – Alistair

Смежные вопросы