2015-10-04 2 views
11

Я пытаюсь докерезировать приложение node.js. Я создал Dockerfile, ниже содержание Dockerfileinstall mongoose в контейнере докера

# Official node base image 
FROM node:0.12 

# Bundle app source 
COPY . /src 

RUN apt-get update && apt-get install -y --no-install-recommends libkrb5-dev supervisor \ 
    && cd /src \ 
    && npm install \ 
    && rm -rf /var/lib/apt/lists/* 

# copy the supervisor conf file 
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf 

# Exclude npm cache from the image 
VOLUME /root/.npm 

# expose environment variable 
EXPOSE 3300 

# start supervisor 
CMD ["/usr/bin/supervisord"] 

, но во время работы НПМ установки команды я вижу следующие предупреждения в журналах

> [email protected] install /rate-my-ride-users-api/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/node_modules/kerberos 
> (node-gyp rebuild) || (exit 0) 

make: Entering directory '/rate-my-ride-users-api/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/node_modules/kerberos/build' 
    CXX(target) Release/obj.target/kerberos/lib/kerberos.o 
    CXX(target) Release/obj.target/kerberos/lib/worker.o 
    CC(target) Release/obj.target/kerberos/lib/kerberosgss.o 
../lib/kerberosgss.c:27:0: warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas] 
#pragma clang diagnostic push 
^ 
../lib/kerberosgss.c:28:0: warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas] 
#pragma clang diagnostic ignored "-Wdeprecated-declarations" 
^ 
../lib/kerberosgss.c: In function 'authenticate_gss_client_wrap': 
../lib/kerberosgss.c:348:19: warning: variable 'server_conf_flags' set but not used [-Wunused-but-set-variable] 
    char buf[4096], server_conf_flags; 
       ^
../lib/kerberosgss.c: At top level: 
../lib/kerberosgss.c:687:0: warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas] 
#pragma clang diagnostic pop 

Я стучал головой о стену с 12 часов , Я почти искал все в Интернете, но я не могу узнать, почему это происходит. Где-то я читал, что мне нужен пакет libkrb5-dev, поэтому я также установил этот пакет, но проблема продолжает.

Может ли кто-нибудь объяснить мне, что здесь происходит? и как я могу это разрешить?

ответ

5

Это всего лишь выход из node-gyp. Вы можете игнорировать эти сообщения, если вы не используете MongoDB Enterprise с Kerberos Authentication.

Тем не менее команда docker build будет успешно работать, и мангуст также будет работать.

Вывод выше - это примерно некоторые директивы прагама. Утверждение pragma было введено с ANSI-C для определения параметров компилятора.

Например, посмотрите на:

../lib/kerberosgss.c: In function 'authenticate_gss_client_wrap': 
../lib/kerberosgss.c:348:19: warning: variable 'server_conf_flags' set but not used [-Wunused-but-set-variable] 
char buf[4096], server_conf_flags; 

Это просто говорит вам, что переменная server_conf_flags определена в Lib/kerberosgss.c: 348: 19 не используется в любом месте. Если вы посмотрите на source on github, это не проблема.

Каждый C-компилятор обрабатывает эти директивы pragam, несколько отличающиеся от намеренно. Возможно, на вашем локальном компьютере у вас есть другой C-компилятор или совершенно другая ОС?

Так что это не о чем беспокоиться.

+0

Я знаю, что это, на мой вопрос, почему есть эти предупреждения, эти предупреждения не было, когда я установить локально (не в Докер изображения) – Syed

+0

Я обновил свой ответ с более подробной информацией об этих прагма-директивах. – PatrickD

+0

Я использую mac для своих локальных и в соответствии с [this] (http://stackoverflow.com/questions/20171095/why-cant-i-check-my-version-of-gcc-compiler-on-os-x) вопрос, mac использует clang. – Syed

1

Как и в случае с другим ответом, вам не нужно беспокоиться об этом предупреждении. Это относится к неизвестному определению прагмы gcc. Например:

../lib/kerberosgss.c:27:0 предупреждение: игнорирование #pragma лязг диагностики [-Wunknown-псевдокомментарии] #pragma лязг диагностический толчок

Это предупреждение эстрадного из-за clang прагмы, которая неизвестна до gcc.

Если вы все еще хотите избавиться от предупреждений, вы можете установить cflags, чтобы игнорировать эти предупреждения. Для того, чтобы сделать это с node-gyp, редактировать ~/.node-gyp/<node_version>/include/node/common.gypi:

Найдите строку:

'cflags': [ '-Wall', '-Wextra', '-Wno-unused-parameter', ], 

и заменить его:

'cflags': [ '-Wall', '-Wextra', '-Wno-unused-parameter', '-Wno-unknown-pragmas','-Wno-unused-but-set-variable', ], 

Это где флаги по умолчанию сохраняются. Обратите внимание на два дополнительных флажка, чтобы отключить предупреждения.В докере вы можете использовать sed, чтобы заменить линию cflags выше.

И я не уверен, почему вы не получаете предупреждения в своей локальной среде. Скорее всего, потому, что вы используете другой компилятор, отличный от gcc или может быть версией gcc, которую вы используете, уже установлены эти флаги.


Edit: Если вы не видите каталог ~/.node-gyp/, выполните следующие команды первой. Это позволит установить файлы разработка для указанной версии узла:

npm install -g node-gyp 
node-gyp install 
Смежные вопросы