2015-06-01 20 views
10

Ich habe eine Anwendung, die in einem Docker-Container ausgeführt wird. Es erfordert einige private Module aus dem privaten NPM-Register des Unternehmens (Sinopia), und der Zugriff darauf erfordert eine Benutzerauthentifizierung. Die Dockerfile ist FROM iojs:latest.Docker bauen + private NPM (+ private Docker Hub)

Ich habe versucht:

1) eine .npmrc Datei im Projekt-Stamm erstellen, das macht eigentlich keinen Unterschied und npm scheint es 2) Variablen env zu ignorieren für NPM_CONFIG_REGISTRY, NPM_CONFIG_USER etc., aber die Benutzer meldet sich nicht an.

Im Grunde scheint ich keine Möglichkeit zu haben, den Benutzer innerhalb des docker build Prozesses zu authentifizieren. Ich hatte gehofft, dass jemand schon auf dieses Problem gestoßen wäre (scheint ein offensichtliches Problem zu sein) und hätte einen guten Weg, es zu lösen.

(es nach oben aus, ich bin mit Automatisiertes Baut auf Docker Hub (auf Push ausgelöst), so dass unsere Server eine private Docker Registrierung mit den vorgebauten Bilder zugreifen können.)

Gibt es gute Möglichkeiten, entweder : 1) Anmeldeinformationen für NPM zur Build-Zeit injizieren (so muss ich keine Anmeldeinformationen an meine Dockerfile committen) ODER 2) tun dies eine andere Möglichkeit, die ich nicht an gedacht habe?

+0

Haben Sie das jemals gelöst? Ich renne in das gleiche Problem :( –

+0

Yep, nur gepostet meine Antwort! – GTF

Antwort

19

ich eine etwas elegant-ish Lösung gefunden ein Basis-Image für Ihre node.js/io.js Container (you/iojs) bei der Schaffung von:

  1. log, um private npm Registrierung mit dem Benutzer, den Sie möchten, Verwendung für docker
  2. kopieren Sie die .npmrc-Datei, die diese

Beispiel .npmrc erzeugt:

registry=https://npm.mydomain.com/ 
username=dockerUser 
[email protected] 
strict-ssl=false 
always-auth=true 
//npm.mydomain.com/:_authToken="someAuthToken" 
  1. Erstellen Sie eine Dockerfile, die die .npmrc Datei entsprechend kopiert.

Hier ist meine Dockerfile (basierend auf 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. alle node.js Hersteller/io.js Behälter FROM you/iojs und Sie sind gut zu gehen .
+0

Ich landete eine ähnliche Sache heute. Es ist der einzige geheime Schlüssel aus all meinen Projekten, die ich zur Build-Zeit brauche :(. Ich denke das ist die beste Lösung derzeit, vielen Dank für Ihre Antwort! –

+0

Hier ist das offizielle Dock über private Npm Repo und Docker: https://docs.npmjs.com/private-modules/docker-and-private-module – magohamoth

3

Für diejenigen, die diesen Artikel über Google zu finden sind und suchen noch nach einer Alternative, die nicht Sie private npm Token auf Docker Bilder und Container mit sich bringt verlassen:

Wir konnten dieses erhalten Arbeiten mit dem npm install vor dem docker build (Indem Sie dies tun, können Sie Ihre .npmrc außerhalb Ihres Bildes \ container haben). Sobald die privaten Module installiert wurden vor Ort können Sie Ihre Dateien über zu dem Bild als Teil des Build kopieren:

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

Sie müssen auch sicherstellen, dass Ihre .dockerignore Datei nicht die node_modules Ordner nicht ausschließt.

Sobald Sie den Ordner in Ihr Bild kopiert haben, ist der Trick zu npm rebuild statt npm install. Dadurch werden alle systemeigenen Abhängigkeiten wiederhergestellt, die durch Unterschiede zwischen Ihrem Build-Server und dem Docker-Betriebssystem verursacht werden:

Verwandte Themen