web-dev-qa-db-ja.com

ヤーンワークスペースを備えたDockerイメージ内にヤーンをインストール

私は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イメージにデプロイするときにワークスペースを処理するための最良の方法は何ですか。

18
dagda1

このコードはdockervmの外部では機能しないため、dockerでも拒否されます。

問題は、コードを作成し、バンドルされたコードをコピーしたことです。ヤーンワークスペースは、distフォルダーにないpackage.jsonを探しています。ワークスペースは、共通のnode_modulesフォルダーに使用している他のワークスペースへのリンクを作成しているだけです。そこではソースコードが必要です。 (ところで、docker vm内にコードをビルドしてみませんか?そうすれば、ソースコードとdistも利用できるようになります。)

5
androbin

これが私の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
###############################################################################
2
Richard Torcato