【发布时间】:2022-08-24 21:30:59
【问题描述】:
我正在尝试使用 Docker 为 Laravel 项目编译我的资产。
因此,我创建了一个名为 npm 的服务,它是从以下 Dockerfile 构建的:
FROM node:16-alpine as node
WORKDIR /usr/src
ADD ./resources ./resources
COPY [\"package.json\", \"package-lock.json\", \"vite.config.js\", \"./\"]
RUN npm install --global cross-env
RUN npm install
RUN npm run build
另外,我正在使用以下 Docker-compose 配置
node:
build:
context: ./
dockerfile: ./services/nodejs/Dockerfile
working_dir: /var/www
container_name: \"nodejs\"
volumes:
- ./:/var/www
tty: true
depends_on:
- php
虽然服务构建成功,但似乎我的主机目录(非空)覆盖了我的节点容器的内容。所以,最终我没有 \"node_modules\" 目录,我编译的资产和资源丢失了。
所以我该怎么做? 我认为我可以先将我的主机文件夹的内容复制到容器中,然后删除我的主机文件夹的内容,然后运行我的脚本,然后将其复制回来。但这似乎是一件非常耗时的事情。这种情况的最佳做法是什么?我确定我不是第一个将全栈 Laravel 项目 docker 化的人。提前致谢
-
你正在使用一个卷为
./:/var/www,它基本上可以做你不想要的 -
您正在使用卷,因此这适用于您的开发环境。然后,您的容器中不需要 node_modules - 只需正常构建它
-
@apokryfos 是的,完全正确。我这样做的原因是因为我希望将节点容器中的文件夹复制回我的主机。我的意思是我必须以某种方式将 \"node_modules\" 和 \"resources\" 文件夹从我的节点容器复制到我的主机上,但我不知道该怎么做。
-
对于生产,您不会使用卷,并将源复制到容器中,然后像现在一样在容器中构建它,但您不需要将其复制回主机。您最终获得的 docker 映像将是您在 docker 主机(实际上是任何 docker 主机)上运行应用程序所需的
-
我个人在容器外部进行拉取,然后在这样做之前将文件复制到容器中,我这样做的原因是因为
git通常不安装在容器中
标签: node.js laravel docker npm