2015-10-04 110 views
11

我正在嘗試dockerize我的node.js應用程序。我創建了一個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命令我看到下列警告在日誌中

> [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的輸出。如果您不使用帶有Kerberos身份驗證的MongoDB Enterprise,則可以忽略此消息。

儘管如此,docker build命令將成功運行,貓鼬也將工作。

上面的輸出只是關於一些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; 

這只是告訴你,該變量server_conf_flags中的lib/kerberosgss.c定義爲:348:19是不是在任何地方使用。如果你看看source on github,這不是問題。

每個C編譯器處理這些pragam指令有意地略有不同。 也許在你的本地機器上你有不同的C編譯器或完全不同的操作系統?

所以這沒什麼好擔心的。

+0

我知道這一點,我的問題是,爲什麼有這些警告,這些警告是不是有當我(不搬運工圖像) – Syed

+0

本地安裝我更新了我的答案以及關於這些編譯指示的更多信息。 – PatrickD

+0

我使用的是我的本地和根據[此] mac(http://stackoverflow.com/questions/20171095/why-cant-i-check-my-version-of-gcc-compiler-on-os-x )問題,mac使用clang。 – Syed

1

就像提到的其他答案一樣,您不必擔心這些警告。這些爲gcc提供了未知的pragma定義。例如:

../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', ], 

這是默認的標誌存儲。注意兩個額外的標誌來禁用警告。在docker中,您可以使用sed來替換上面的cflags行。

我不確定你爲什麼沒有在你的本地環境中得到警告。很可能是因爲您使用的不是gcc以外的其他編譯器,或者可能是您正在使用的gcc版本,請將這些標誌設置好。


編輯:如果你沒有看到~/.node-gyp/目錄,先運行這些命令。這將安裝開發文件指定節點版本:

npm install -g node-gyp 
node-gyp install