Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用纱线工作区在docker图像内部安装纱线_Docker_Yarnpkg - Fatal编程技术网

使用纱线工作区在docker图像内部安装纱线

使用纱线工作区在docker图像内部安装纱线,docker,yarnpkg,Docker,Yarnpkg,我正在使用Thread工作区,我的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 in

我正在使用Thread工作区,我的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
但我得到了以下错误:

错误发生意外错误: “:找不到”

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

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


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

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


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

这是我的docker文件。我使用纱线工作区和勒纳,但没有勒纳应该是类似的。您希望构建共享库,然后通过在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
###############################################################################

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