首先,我要感谢David Maze和trust512发布他们的答案。不幸的是,他们没有帮助我解决我的问题。
我想发表我对这个问题的答案。
我的
docker-compose.yml:
---# Define Docker Compose version.version: "3"# Define all the containers.services: # Frontend Container. frontend: build: ./app/frontend volumes: - ./app/frontend:/usr/src/app ports: - 3000:3000 environment: NODE_ENV: development command: /usr/src/app/entrypoint.sh
我的
Dockerfile:
# Set the base image.FROM node:10# Create and define the node_modules's cache directory.RUN mkdir /usr/src/cacheWORKDIR /usr/src/cache# Install the application's dependencies into the node_modules's cache directory.COPY package.json ./COPY package-lock.json ./RUN npm install# Create and define the application's working directory.RUN mkdir /usr/src/appWORKDIR /usr/src/app
最后但并非最不重要的
entrypoint.sh:
#!/bin/bashcp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/exec npm start
这里最棘手的部分是将安装程序安装
node_modules到我们的中定义
node_module的缓存目录(
/usr/src/cache)中
Dockerfile。之后,
entrypoint.sh将将其
node_modules从缓存目录(
/usr/src/cache)移至我们的应用程序目录(
/usr/src/app)。由于这个原因,整个
node_modules目录将出现在我们的主机上。
看着上面的问题,我想要:
node_modules自动安装而不是手动安装- 安装
node_modules在Docker容器而不是主机中- 已经
node_modules与主机(同步,如果我安装多克尔容器内的一些新的包装,应自动与主机无需任何手动 *** 作同步
第一件事完成了:
node_modules自动安装。第二件事也完成了:
node_modules安装在Docker容器中(因此,不会出现跨平台问题)。第三件事也完成了:
node_modules安装在Docker容器中的主机将在我们的主机上
可见 并且将被 同步 !如果我们在Docker容器中安装了一些新软件包,它将立即与我们的主机同步。
需要注意的重要一点:确实,安装在Docker容器中的新软件包将出现在中
/usr/src/app/node_modules。由于此目录与我们的主机同步,因此这个新软件包也将出现在我们主机的
node_modules目录中。但是,此时
/usr/src/cache/node_modules将具有旧版本(没有此新软件包)。无论如何,这对我们来说不是问题。在下一个
docker-compose up--build(
--build必需)期间,Docker将重新安装
node_modules(因为
package.json已更改),并且
entrypoint.sh文件会将它们移至我们的
/usr/src/app/node_modules。
您应该考虑另一件事。如果您
git pull从远程存储库中获取代码,或者
git checkout your-teammate-branch在运行Docker时,可能会将一些新软件包添加到
package.json文件中。在这种情况下,您应该使用停止Docker,
CTRL +C然后使用
docker-compose up--build(
--build必需)再次将其重新启动。如果您的容器作为守护程序运行,则应执行
docker-composestop以停止容器并使用
docker-compose up --build(
--build必需)再次将其重新启动。
如有任何疑问,请在评论中让我知道。
希望这可以帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)