绑定挂载是将主机目录(在我们的情况下为Windows)共享或挂载到Docker容器中。
在容器目录中,您挂载的主机目录的所有内容都将是可访问和异步(读写),您可以编辑主机计算机上的任何文件,并且所有更改都将影响容器目录或文件。
要实现此目标,您的Dckerfile应如下所示:
FROM node:14
WORKDIR /app
COPY package*.json .
RUN npm install
COPY . .
EXPOSE 80
CMD [ "npm", "start" ]
在你的 package.json 文件中
{
"name": "data-volume-example",
"version": "1.0.0",
"description": "",
"main": "server.js",
"author": "O.Abdelaaziz",
"license": "ISC",
"scripts": {
"start": "nodemon server.js"
},
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.17.1"
},
"devDependencies": {
"nodemon": "2.0.4"
}
}
现在重要的是命令,如何编写不出错的命令并避免任何错误,例如:
docker: 守护程序返回错误:在创建挂载源路径“/run/desktop/mnt/host/c/Users/amine/Desktop/data-volumes”时出错:mkdir /run/desktop/mnt/host/c: 文件已存在。
或者当您认为您已经成功运行容器,但在列出正在运行/停止的容器后却发现容器已停止时,会出现一些错误。
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c31d3bd8204a 102 "docker-entrypoint.s…" 52 seconds ago Exited (254) 49 seconds ago node_data_volumes_container
通过记录容器
docker logs c31d3bd8204a
npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /app/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
在绑定挂载卷中,我们知道文件夹的存储位置,因为作为开发人员,我们将容器内路径应映射到主机上的路径,这就是诀窍。
如何编写呢?
请看这个链接:
使用Docker工具箱为Windows挂载Docker卷
你的命令应该像这样。
docker run -d --name node_data_volumes_container -p 3000:80 -v feedback:/app/feedback -v "/C/Users/amine/Desktop/data-volumes/:/app" -v /app/node_modules b52
-d
在分离模式下运行容器
--name
给容器命名
-p
将主机上的端口(3000)转发到容器上的端口(80)
-v feedback:/app/feedback
命名卷可保留所有文件,即使停止容器也是如此
-v "/C/Users/amine/Desktop/data-volumes/:/app"
将主机目录绑定到容器目录
-v /app/node_modules
匿名卷可保留/查找依赖关系,即使停止容器也是如此
b52
来自镜像id的前三个字母(您可以提供完整id或名称)
docker run -d -p 3000:80 --name feedback-app -v /app/node_modules feedback-node:volumes
- Eranga Heshan-v
йҖүйЎ№гҖӮ(-v node_modules
жҳҜз»ҷDockerзҡ„жҢҮд»ӨпјҢз”ЁдәҺдҝқз•ҷж—§зҡ„node_modules
зӣ®еҪ•е№¶дјҳе…ҲдҪҝз”Ёж—§зүҲжң¬пјҢеҚіеҝҪз•Ҙй•ңеғҸдёӯд»»дҪ•жӣҙж”№пјҢжҜ”еҰӮpackage.json
ж–Ү件гҖӮдҪ дёҚйңҖиҰҒиҝҷдёӘгҖӮ) - David Mazefeedback-node:volumes
镜像并尝试这个命令docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
吗?最后一个命令是@DavidMaze建议的。它会删除所有你的卷。 - Eranga Heshan