2015-10-04 42 views
11

Tôi đang cố gắng dockerize ứng dụng node.js của mình. Tôi tạo ra một Dockerfile, dưới đây là những nội dung của Dockerfilecài đặt mongoose trong docker container

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

nhưng khi chạy NPM lệnh cài đặt tôi nhìn thấy cảnh báo sau đây trong các bản ghi

> [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 

Tôi đập đầu tôi vào tường kể từ 12 giờ , Tôi gần như đã tìm kiếm mọi thứ trên internet, nhưng tôi không thể tìm ra lý do tại sao điều này xảy ra. Một nơi nào đó tôi đọc rằng tôi cần libkrb5-dev gói vì vậy tôi đã cài đặt gói đó cũng nhưng vẫn còn vấn đề vẫn tiếp tục.

Có ai có thể giải thích cho tôi điều gì đang xảy ra ở đây không? và làm cách nào tôi có thể giải quyết vấn đề này?

Trả lời

5

Đây chỉ là đầu ra từ nút-gyp. Bạn có thể bỏ qua thông báo này nếu bạn không sử dụng MongoDB Enterprise với Xác thực Kerberos.

Tuy nhiên, lệnh docker build sẽ chạy thành công và mongoose cũng sẽ hoạt động.

Đầu ra ở trên chỉ là về một số chỉ thị pragam. Lệnh pragma được giới thiệu với ANSI-C để xác định các tùy chọn trình biên dịch.

Ví dụ có một cái nhìn tại địa chỉ:

../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; 

này chỉ nói với bạn, rằng biến server_conf_flags quy định tại lib/kerberosgss.c: 348: 19 không được sử dụng bất cứ nơi nào. Nếu bạn nhìn vào source on github, đây không phải là vấn đề.

Mỗi trình biên dịch C xử lý các chỉ thị pragam này hơi khác một cách có chủ ý. Có thể trên máy cục bộ của bạn, bạn đã có một trình biên dịch C khác hoặc một hệ điều hành hoàn toàn khác?

Vì vậy, điều này không có gì phải lo lắng.

+0

Tôi biết điều này, câu hỏi của tôi là lý do tại sao có những cảnh báo, những cảnh báo này không có khi tôi cài đặt tại địa phương (không có trong hình ảnh Docker) – Syed

+0

tôi cập nhật câu trả lời của tôi với một số thông tin thêm về các chỉ thị pragma này. – PatrickD

+0

Tôi đang sử dụng mac cho địa phương và theo [this] (http://stackoverflow.com/questions/20171095/why-cant-i-check-my-version-of-gcc-compiler-on-os-x) câu hỏi, mac sử dụng clang. – Syed

1

Giống như câu trả lời khác được đề cập, bạn không cần phải lo lắng về những cảnh báo này. Chúng xuất hiện cho định nghĩa pragma chưa biết đến gcc. Ví dụ:

../lib/kerberosgss.c:27:0: cảnh báo: lờ đi #pragma kêu vang chẩn đoán [-Wunknown-pragmas] #pragma kêu vang đẩy chẩn đoán

pops Cảnh báo này lên vì clang pragma mà không được biết đến gcc.

Nếu bạn vẫn muốn loại bỏ các cảnh báo, bạn có thể đặt cflags để bỏ qua những cảnh báo này. Để làm điều này với node-gyp, sửa ~/.node-gyp/<node_version>/include/node/common.gypi:

Tìm dòng:

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

và thay thế bằng:

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

Đây là nơi cờ mặc định được lưu trữ. Lưu ý thêm hai cờ để vô hiệu hóa các cảnh báo.Trong docker, bạn có thể sử dụng sed để thay thế dòng cflags bằng ở trên.

Và tôi không chắc tại sao bạn không nhận được cảnh báo trong môi trường địa phương của bạn. Rất có thể vì bạn đang sử dụng trình biên dịch khác với gcc hoặc có thể là phiên bản gcc bạn đang sử dụng, hãy đặt những cờ đó.


Edit: Nếu bạn không thấy thư mục ~/.node-gyp/, chạy các lệnh đầu tiên. Điều này sẽ cài đặt các file phát triển cho phiên bản nút định:

npm install -g node-gyp 
node-gyp install 
Các vấn đề liên quan