私はyarnワークスペースを使用しており、package.jsonに次のパッケージがあります。
"workspaces": ["packages/*"]
デプロイするDockerイメージを作成しようとしていますが、次のDockerfileがあります。
# production dockerfile
FROM node:9.2
# add code
COPY ./packages/website/dist /cutting
WORKDIR /cutting
COPY package.json /cutting/
RUN yarn install --pure-lockfile && yarn cache clean --production
CMD npm run serve
しかし、次のエラーが発生します。
エラー予期しないエラーが発生しました: " https://registry.yarnpkg.com/@cutting%2futil :見つかりません"
@cutting/util
は私のワークスペースパッケージの1つの名前です。
したがって、問題は、Dockerイメージにソースコードがないため、yarnpkgからインストールしようとしていることです。
dockerイメージにデプロイするときにワークスペースを処理するための最良の方法は何ですか。
このコードはdockervmの外部では機能しないため、dockerでも拒否されます。
問題は、コードを作成し、バンドルされたコードをコピーしたことです。ヤーンワークスペースは、dist
フォルダーにないpackage.json
を探しています。ワークスペースは、共通のnode_modules
フォルダーに使用している他のワークスペースへのリンクを作成しているだけです。そこではソースコードが必要です。 (ところで、docker vm内にコードをビルドしてみませんか?そうすれば、ソースコードとdistも利用できるようになります。)
これが私のdockerfileです。私は糸のワークスペースとレルナを使用していますが、レルナがない場合も同様です。共有ライブラリをビルドしてから、distフォルダーでコードを実行して、ビルドがローカルで機能することをテストします。
###############################################################################
# Step 1 : Builder image
FROM node:11 AS builder
WORKDIR /usr/src/app
ENV NODE_ENV production
RUN npm i -g yarn
RUN npm i -g lerna
COPY ./lerna.json .
COPY ./package* ./
COPY ./yarn* ./
COPY ./.env .
COPY ./packages/shared/ ./packages/shared
COPY ./packages/api/ ./packages/api
# Install dependencies and build whatever you have to build
RUN yarn install --production
RUN lerna bootstrap
RUN cd /usr/src/app/packages/shared && yarn build
RUN cd /usr/src/app/packages/api && yarn build
###############################################################################
# Step 2 : Run image
FROM node:11
LABEL maintainer="Richard T"
LABEL version="1.0"
LABEL description="This is our dist docker image"
RUN npm i -g yarn
RUN npm i -g lerna
ENV NODE_ENV production
ENV NPM_CONFIG_LOGLEVEL error
ARG PORT=3001
ENV PORT $PORT
WORKDIR /usr/src/app
COPY ./package* ./
COPY ./lerna.json ./
COPY ./.env ./
COPY ./yarn* ./
COPY --from=builder /usr/src/app/packages/shared ./packages/shared
COPY ./packages/api/package* ./packages/api/
COPY ./packages/api/.env* ./packages/api/
COPY --from=builder /usr/src/app/packages/api ./packages/api
RUN yarn install
CMD cd ./packages/api && yarn start-production
EXPOSE $PORT
###############################################################################