2015-06-01 24 views
10

Tôi có một ứng dụng chạy trong vùng chứa Docker. Nó yêu cầu một số mô-đun riêng từ đăng ký NPM riêng của công ty (Sinopia) và việc truy cập các mô-đun này yêu cầu xác thực người dùng. Dockerfile là FROM iojs:latest.docker build + private NPM (+ trung tâm docker riêng)

Tôi đã thử:

1) tạo ra một tập tin .npmrc trong thư mục gốc của dự án, điều này thực sự làm cho không có sự khác biệt và NPM dường như bỏ qua nó 2) sử dụng các biến env cho NPM_CONFIG_REGISTRY, NPM_CONFIG_USER vv, nhưng các người dùng không đăng nhập.

Về cơ bản, dường như tôi không có cách nào để xác thực người dùng trong quy trình docker build. Tôi đã hy vọng rằng ai đó có thể đã gặp phải vấn đề này (có vẻ như là một vấn đề đủ rõ ràng) và sẽ có cách giải quyết tốt.

(Để đầu nó đi, tôi đang sử dụng tự động xây dựng trên Docker Hub (kích hoạt trên push) để các máy chủ của chúng tôi có thể truy cập vào một Docker registry riêng với những hình ảnh được xây dựng sẵn.)

Có cách nào tốt của một trong hai : 1) nhập thông tin đăng nhập cho NPM tại thời điểm xây dựng (vì vậy tôi không phải cam kết thông tin đăng nhập vào Dockerfile của mình) HOẶC 2) thực hiện việc này theo cách khác mà tôi chưa từng nghĩ đến ?

+0

Bạn đã bao giờ giải quyết vấn đề này chưa? Tôi đang chạy vào cùng một vấn đề: ( –

+0

yep, chỉ cần đăng câu trả lời của tôi! – GTF

Trả lời

19

Tôi tìm thấy một giải pháp khá thanh lịch-ish trong việc tạo ra một hình ảnh cơ sở cho Node.js bạn/container io.js (you/iojs):

  1. đăng nhập để đăng ký NPM tin của bạn với người dùng mà bạn muốn sử dụng cho Docker
  2. copy file .npmrc rằng đây tạo

Ví dụ .npmrc:

registry=https://npm.mydomain.com/ 
username=dockerUser 
[email protected] 
strict-ssl=false 
always-auth=true 
//npm.mydomain.com/:_authToken="someAuthToken" 
  1. tạo một Dockerfile sao chép tệp .npmrc một cách thích hợp.

Dưới đây là tôi Dockerfile (dựa trên iojs:onbuild):

FROM iojs:2.2.1 

MAINTAINER YourSelf 

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

# Create the app directory 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

# Copy npm config 
COPY .npmrc /root/.npmrc 

# Install app 
ONBUILD COPY package.json /usr/src/app/ 
ONBUILD RUN npm install 
ONBUILD COPY . /usr/src/app 

# Run 
CMD [ "npm", "start" ] 
  1. Làm cho tất cả Node.js bạn/io.js container FROM you/iojs và bạn tốt để đi .
+0

Tôi đã làm một điều tương tự ngày hôm nay. Đó là chìa khóa bí mật duy nhất trong tất cả các dự án của tôi mà tôi cần tại thời gian xây dựng :(. –

+0

Đây là dock chính thức về repo npm riêng và Docker: https://docs.npmjs.com/private-modules/docker-and-private-modules – magohamoth

3

Đối với những người đang tìm bài viết này qua google và vẫn đang tìm kiếm một cách khác mà không liên quan đến để lại cho bạn tokens NPM tin về hình ảnh Docker và container của bạn:

Chúng tôi đã có thể có được điều này làm việc bằng cách thực hiện npm install trước docker build (Bằng cách thực hiện điều này, nó cho phép bạn có .npmrc bên ngoài hình ảnh \ vùng chứa) của mình. Khi các module riêng đã được lắp đặt tại địa phương bạn có thể sao chép các tập tin của bạn trên đến hình ảnh như một phần của xây dựng của bạn:

# Make sure the node_modules contain only the production modules when building this image 
    COPY . /usr/src/app 

Bạn cũng cần phải đảm bảo rằng tập tin .dockerignore bạn không loại trừ thư mục node_modules.

Khi bạn đã sao chép thư mục vào hình ảnh của mình, mẹo là để npm rebuild thay vì npm install. Điều này sẽ xây dựng lại bất kỳ phụ thuộc gốc nào được thực hiện bởi bất kỳ sự khác biệt nào giữa máy chủ xây dựng và hệ điều hành docker của bạn:

FROM nodesource/vivid:LTS 

    # For application location, default from nodesource is /usr/src/app 
    # Make sure the node_modules contain only the production modules when building this image 
    COPY . /usr/src/app 
    WORKDIR /usr/src/app 
    RUN npm rebuild 
    CMD npm start 
Các vấn đề liên quan