17

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

私が試してみました:

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

基本的に、プロセス内でユーザーを認証する方法がないようですdocker build。誰かがすでにこの問題に遭遇しており (十分に明白な問題のように思えます)、それを解決する良い方法があることを願っていました。

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

1) ビルド時に NPM の認証情報を注入する (そのため、Dockerfile に認証情報をコミットする必要はありません) または 2) 考えもしなかった別の方法でこれを実行しますか?

4

5 に答える 5

12

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

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

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

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

フォルダーをイメージにコピーしたら、トリックnpm rebuildnpm install. これにより、ビルド サーバーと Docker OS の違いによって影響を受けるネイティブの依存関係が再構築されます。

    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
于 2016-08-05T05:59:37.347 に答える
0

ビルドキットの回答は正しいですが、すべてをルートとして実行することは、セキュリティ対策として不適切と見なされます。

nodeDockerfile が設定するノードとして正しいユーザーを使用して動作する Dockerfile を次に示します。シークレット マウントにはパラメーター セットがあることに注意してください。そうしないと、ユーザーが読み取れないuidroot としてマウントされます。nodechown する正しい COPY コマンドにも注意してuser:groupくださいnode:node

FROM node:12-alpine

USER node

WORKDIR /home/node/app

COPY --chown=node:node package*.json ./

RUN --mount=type=secret,id=npm,target=./.npmrc,uid=1000 npm ci

COPY --chown=node:node index.js .

COPY --chown=node:node src ./src

CMD [ "node", "index.js" ]

于 2022-03-05T21:44:34.077 に答える