纱线安装在码头图像内与纱线工作区

时间:2018-02-24 23:00:49

标签: docker yarnpkg

我正在使用纱线工作区,我在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是我的一个工作区包的名称。

所以问题是docker镜像中没有源代码,所以它试图从yarnpkg安装它。

在部署到docker镜像时处理工作空间的最佳方法是什么。

2 个答案:

答案 0 :(得分:4)

此代码在docker vm之外不起作用,因此它也会在docker中拒绝。

问题是您已经构建了代码,并复制了捆绑的代码。纱线工作区正在寻找package.json文件夹中没有的dist。工作区只是在公共node_modules文件夹中创建一个链接到您正在使用的其他工作区。那里需要源代码。 (顺便说一句,为什么不在docker vm中构建代码呢?那样源代码和dist也可用。)

答案 1 :(得分:1)

这是我的dockerfile。我使用纱线工作区和lerna,但没有lerna的情况应该相似。您想要构建共享库,然后通过在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
###############################################################################