Dockerコンテナで実行されるアプリケーションがあります。会社のプライベートNPMレジストリ(Sinopia)からいくつかのプライベートモジュールが必要であり、これらにアクセスするにはユーザー認証が必要です。 DockerfileはFROM iojs:latest
です。
私が試してみました:
1)プロジェクトルートに.npmrcファイルを作成します。これは実際には違いがなく、npmはそれを無視しているようです。2)NPM_CONFIG_REGISTRY
、NPM_CONFIG_USER
などの環境変数を使用しますが、ユーザーはログに記録しません。に。
基本的に、docker build
プロセス内でユーザーを認証する方法がないようです。私は誰かがすでにこの問題に遭遇しているかもしれず(明らかに十分な問題のように思われる)、それを解決する良い方法があることを望んでいました。
(さらに、Docker Hubで自動ビルド(プッシュでトリガー)を使用しているので、サーバーはビルド済みのイメージを使用してプライベートDockerレジストリにアクセスできます。)
次のいずれかの良い方法があります:1)ビルド時にNPMの資格情報を挿入する(したがって、Dockerfileに資格情報をコミットする必要はありません)OR 2)これを私が行っていない別の方法で行うtの考え?
Node.js/io.jsコンテナー(you/iojs
)のベースイメージを作成する際に、ややエレガントな解決策を見つけました。
.npmrc
ファイルをコピーします例.npmrc
:
registry=https://npm.mydomain.com/
username=dockerUser
[email protected]
strict-ssl=false
always-auth=true
//npm.mydomain.com/:_authToken="someAuthToken"
.npmrc
ファイルを適切にコピーするDockerfile
を作成します。これが私のDockerfile
(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" ]
FROM you/iojs
にして、準備が整いました。グーグルでこの記事を見つけていて、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