web-dev-qa-db-ja.com

docker build +プライベートNPM(+プライベートdockerハブ)

Dockerコンテナで実行されるアプリケーションがあります。会社のプライベートNPMレジストリ(Sinopia)からいくつかのプライベートモジュールが必要であり、これらにアクセスするにはユーザー認証が必要です。 DockerfileはFROM iojs:latestです。

私が試してみました:

1)プロジェクトルートに.npmrcファイルを作成します。これは実際には違いがなく、npmはそれを無視しているようです。2)NPM_CONFIG_REGISTRYNPM_CONFIG_USERなどの環境変数を使用しますが、ユーザーはログに記録しません。に。

基本的に、docker buildプロセス内でユーザーを認証する方法がないようです。私は誰かがすでにこの問題に遭遇しているかもしれず(明らかに十分な問題のように思われる)、それを解決する良い方法があることを望んでいました。

(さらに、Docker Hubで自動ビルド(プッシュでトリガー)を使用しているので、サーバーはビルド済みのイメージを使用してプライベートDockerレジストリにアクセスできます。)

次のいずれかの良い方法があります:1)ビルド時にNPMの資格情報を挿入する(したがって、Dockerfileに資格情報をコミットする必要はありません)OR 2)これを私が行っていない別の方法で行うtの考え?

15
GTF

Node.js/io.jsコンテナー(you/iojs)のベースイメージを作成する際に、ややエレガントな解決策を見つけました。

  1. dockerに使用するユーザーでプライベートnpmレジストリにログインします
  2. これが生成する.npmrcファイルをコピーします

.npmrc

registry=https://npm.mydomain.com/
username=dockerUser
[email protected]
strict-ssl=false
always-auth=true
//npm.mydomain.com/:_authToken="someAuthToken"
  1. .npmrcファイルを適切にコピーするDockerfileを作成します。

これが私のDockerfileiojs: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. すべてのnode.js/io.jsコンテナーをFROM you/iojsにして、準備が整いました。
24
GTF

グーグルでこの記事を見つけていて、Dockerイメージとコンテナーにプライベートnpmトークンを残すことを含まない別の方法をまだ探している人のために:

npm installの前にdocker buildを実行することで、これを機能させることができました(これを実行することで、.npmrcをimage\containerの外に置くことができます)。プライベートモジュールがローカルにインストールされたら、ビルドの一部としてファイルをイメージにコピーできます。

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

また、.dockerignoreファイルがnode_modulesフォルダーを除外していないことを確認する必要があります。

フォルダをイメージにコピーしたら、コツはnpm rebuildではなくnpm installにすることです。これにより、ビルドサーバーとDockerOSの違いによって影響を受けるネイティブの依存関係が再構築されます。

    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
6
Kris Croaker