Node.js Docker-卷说明
据我所知,Node.js Docker-卷说明,node.js,docker,Node.js,Docker,据我所知,Docker中的volume是容器的一些永久数据,可以映射本地文件夹和容器文件夹 在早期,我面临着错误:在Docker中找不到模块“winston”问题,其中提到: 有人在这篇帖子里告诉我: 从docker-compose.yml中删除卷:-./:/server。它覆盖容器中包含节点_模块的整个目录 删除卷:-./:/server后,上述问题就解决了。 但是,出现了另一个问题。 我通过添加回卷来解决上述问题:-./:/server,但我不知道这是什么原因 问题 以上两个问题的原因和
Docker
中的volume
是容器的一些永久数据,可以映射本地文件夹和容器文件夹
在早期,我面临着错误:在Docker中找不到模块“winston”
问题,其中提到:有人在这篇帖子里告诉我: 从docker-compose.yml中删除卷:-./:/server。它覆盖容器中包含节点_模块的整个目录 删除
卷:-./:/server
后,上述问题就解决了。但是,出现了另一个问题。
我通过添加回
卷来解决上述问题:-./:/server
,但我不知道这是什么原因问题
构建
和卷
之间发生了什么,以及构建
和卷
之间的关系是什么FROM node:lts-alpine
RUN npm install --global sequelize-cli nodemon
WORKDIR /server
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3030
CMD ["npm", "run", "dev"]
docker-compose.yml
version: '2.1'
services:
test-db:
image: mysql:5.7
...
test-web:
environment:
- NODE_ENV=local
- PORT=3030
build: . <------------------------ It takes Dockerfile in current directory
command: >
./wait-for-db-redis.sh test-db npm run dev
volumes:
- ./:/server <------------------------ how and when does this line works?
ports:
- "3030:3030"
depends_on:
- test-db
版本:“2.1”
服务:
测试数据库:
图片:mysql:5.7
...
测试网站:
环境:
-节点_ENV=本地
-端口=3030
生成:。
./wait-for-db-redis.sh test db npm run dev
卷数:
-./:/server当您没有任何卷时:
,您的容器将运行内置到映像中的代码。这很好!但是,容器文件系统与主机文件系统完全分离,并且映像包含应用程序的固定副本。在非Docker环境中构建和测试应用程序后,更改应用程序时,需要重建映像
如果您在应用程序目录(:/server
)上绑定装载卷,则主机目录的内容将替换映像内容;您在Dockerfile中所做的任何工作都会被完全忽略。这也意味着容器中的/server/node\u modules
是主机上的/node\u modules
。如果主机和容器环境不一致(MacOS主机/Linux容器;Ubuntu主机/Alpine容器;…),则可能存在导致此问题的兼容性问题
如果您还在节点模块
目录(/server/node\u modules
)上装入匿名卷,则仅在第一次运行容器时才会将映像中的节点模块
目录复制到卷中,然后将卷内容装入容器中。如果更新映像,旧卷内容将优先(对package.json的更改将被忽略)
生成图像时,只有build:
块的内容起作用。没有卷:
已装入,环境:
未设置变量,并且生成环境未连接到网络:
结果是,如果您根本没有卷:
版本:“3.8”
服务:
应用程序:
生成:。
端口:['3000:3000']
它与主机环境完全断开连接。如果代码发生更改,则需要重新构建图像。另一方面,您可以docker将构建的映像推送到注册表,并在其他地方运行它,而不需要单独的节点副本或应用程序源代码
如果使用卷装载替换应用程序目录,则映像生成中的所有内容都将被忽略。我看到了一些问题,它们将此问题带到了逻辑范围,并跳过映像构建,只需将主机目录绑定到未修改的节点上。在这里使用Docker并没有真正的好处,尤其是对于前端应用程序;安装Node,而不是安装Docker,并使用普通开发工具。除了下面由@David Maze给出的精彩答案外,在本报告中,我用一些图表解释了什么是容器,什么是图像。