在docker集装箱里安装mongoose

我正在试图dockerize我的node.js应用程序。 我创build了一个Dockerfile,下面是Dockerfile的内容

# 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"] 

但在运行npm install命令时,我在日志中看到以下警告

 > kerberos@0.0.14 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个小时就把我的头撞在墙上,我几乎在网上search了所有的东西,但我无法找出发生这种情况的原因。 我读过的地方是我需要libkrb5-dev软件包,所以我也安装了这个软件包,但问题仍然存在。

任何人都可以向我解释这里发生了什么? 以及我如何解决这个问题?

这只是node-gyp的输出。 如果您不使用带有Kerberos身份validation的MongoDB Enterprise,则可以忽略此消息。

不过, docker build命令会成功运行,mongoose也会运行。

上面的输出只是一些pragam指令。 编译语句是由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; 

这只是告诉你,在lib / kerberosgss.c:348:19中定义的variablesserver_conf_flags不会在任何地方使用。 如果你看看github上的源代码 ,这不是一个问题。

每个C编译器处理这些pragam指令有意地略有不同。 也许在你的本地机器上,你有不同的C编译器或完全不同的操作系统?

所以这是没有什么可担心的。

就像提到的其他答案一样,您不必担心这些警告。 这些来自未知的gcc定义。 例如:

../lib/kerberosgss.c:27:0:warning:忽略#pragma clang诊断[-Wunknown-pragmas] #pragma clang诊断推送

这个警告popup,因为gcc不知道的clang编译指示。

如果你仍然想摆脱警告,你可以设置cflags忽略这些警告。 要使用node-gyp ~/.node-gyp/<node_version>/include/node/common.gypi完成此操作,请编辑~/.node-gyp/<node_version>/include/node/common.gypi

find这一行:

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

并将其replace为:

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

这是存储默认标志的地方。 注意两个额外的标志来禁用警告。 在docker中,你可以使用sed来replace上面的cflags行。

而且我不确定为什么你没有在当地的环境中得到警告。 很有可能是因为您使用的不是gcc以外的其他编译器,或者可能是您正在使用的gcc版本,所以已经设置了这些标志。


编辑:如果你没有看到~/.node-gyp/目录,请先运行这些命令。 这将安装指定节点版本的开发文件:

 npm install -g node-gyp node-gyp install