【问题标题】:yarn install inside docker image with yarn workspaces使用纱线工作空间在 docker 映像中安装纱线
【发布时间】:2018-02-24 23:00:49
【问题描述】:

我正在使用纱线工作区,我的 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

但我收到以下错误:

error 发生意外错误: "https://registry.yarnpkg.com/@cutting%2futil: 未找到"

@cutting/util 是我的一个工作区包的名称。

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

部署到 docker 映像时处理工作区的最佳方式是什么。

【问题讨论】:

  • dist 文件夹在这里包含什么? @Glogo
  • dist 是 webpack 构建的捆绑的 javascript、css 和 index.html
  • 任何示例项目git repo,我都可以试试。
  • 一种可能的解决方案是将包直接复制到 docker image RUN yarn add file:./@cutting/util 但必须有更好的方法
  • 我最终发布了 npm 包并走这条路

标签: docker yarnpkg


【解决方案1】:

此代码在 docker vm 之外无法运行,因此它也会在 docker 中拒绝。

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

【讨论】:

    【解决方案2】:

    这是我的 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
    ###############################################################################
    

    【讨论】:

      猜你喜欢
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 2018-07-18
      相关资源
      最近更新 更多