我正在使用Docker容器来运行我的CRA应用程序。我使用了两个不同的DockerFile,一个用于在开发中运行CRA,另一个用于生成构建。在安装依赖项的步骤中:
FROM node:15.5.0-alpine3.10
USER node
RUN mkdir /home/node/code
WORKDIR /home/node/code
COPY package.json yarn.lock ./
RUN yarn
ENV PATH /home/node/code/node_modules/.bin:$PATH
CMD yarn start
在容器生成新版本的文件后,我需要将更新后的yarn.lock文件(或package-lock.json文件使用NPM(复制回主机。
我到处寻找解决方案,但没有找到任何解决这个问题的方法。
docker cp,例如docker cp [running container id]:/home/node/code/yarn.lock yarn.lock
。您也可以使用卷,而不是复制内容。
我跌跌撞撞地来到这里,一个可能的解决方案是使用:
RUN纱线安装-冻结锁定文件
我解决了将它移动到文件夹中并使用卷同步它的问题(示例仅包括与此情况相关的代码(。
文件./Dockerfile
:
FROM node:12-alpine
# Copy all files inside sync-package-lock into workdir of docker
COPY sync-package-lock ./
# If package-lock.json is not found in previous step, it will be created in the following npm install
RUN npm install
RUN npm run build
# Following entrypoint will copy the package-lock.json to the sync volume
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT [ "/docker-entrypoint.sh" ]
CMD [ "npm", "run", "serve" ]
文件./docker-entrypoint.sh
:
#!/bin/sh
# copy package-lock.json to the shared volume "sync-package-lock" so its synced between host and container
cp -a /app/package-lock.json /app/sync-package-lock/
echo "Finised docker-entrypoint.sh"
# Finish entrypoint. Run the CMD
exec "$@"
文件docker-compose.yml
:
volumes:
- "../backend/sync-package-lock:/app/sync-package-lock"