运行此命令后,我在日志中得到一个错误:
docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback -v“/WorkSpace/d/data-volumes-03-adj-node-code:/app”-v /app/node_modules feedback-node:volumes
错误是:
internal/modules/cjs/loader.js:892 throw err;^
错误:无法找到模块“/app/server.js”at Function.Module._resolveFilename(internal/modules/cjs/loader.js:889:15)at Function.Module._load(internal/modules/cjs/loader.js:745:27)at Function.executeUserEntryPoint [as runMain](internal/modules/run_main.js:76:12)at internal/main/run_main_module.js:17:47 { code:'MODULE_NOT_FOUND',requireStack:[] }
我该如何解决这个问题?
My Dockerfile:
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 80
# VOLUME ["/app/feedback"]
CMD ["node", "server.js"]
5条答案
按热度按时间ruarlubt1#
绑定
-v "/WorkSpace/d/data-volumes-03-adj-node-code:/app"
破坏了一切!它将主机目录中的内容挂载到容器的/app
路径上,因此在构建docker镜像期间安装的所有模块都将丢失。我们能做些什么呢?在其他地方安装节点模块并更改其默认节点路径。所以你的Dockerfile变成了(删除了
COPY . .
,因为你想在容器上绑定挂载你的项目文件,所以这是不必要的):运行你的docker镜像:
yzckvree2#
问题是您没有在
-v "/WorkSpace/d/data-volumes-03-adj-node-code:/app"
中指定项目目录的完整路径。您应该执行
-v "c:/WorkSpace/d/data-volumes-03-adj-node-code:/app"
ttisahbt3#
绑定mount share或挂载host目录到Docker容器。
在容器内部,可以访问正在装载的主机目录的所有内容。
使用bind mount时,我们通常只在docker镜像中安装依赖项,因为所有代码都可以从mount路径访问。
例如
dockerfile
package.json
因此,对于热重新加载,也可以使用
nodemon
不要直接将整个文件夹移动到容器中,因为可能会覆盖依赖项。
或者
也有同样的好文章:https://www.freecodecamp.org/news/how-to-enable-live-reload-on-docker-based-applications/
6tqwzwtp4#
您应该运行以下命令:
Reference
ffscu2ro5#
绑定挂载是将主机目录(在我们的例子中是windows)共享或挂载到Docker容器。
在容器目录中,您正在挂载的主机目录的所有内容都将是可访问的和异步的(读写),您可以编辑主机上的任何文件,所有更改都将影响容器目录或文件。
要实现这一点,你的Dckerfile应该看起来像这样:
在您的package.json中
现在重要的是命令,如何编写一个没有错误的命令,并避免任何错误,如:
docker:来自守护进程的错误响应:创建装载源路径'/run/desktop/mnt/host/c/Users/amine/Desktop/data-volumes'时出错:mkdir /run/desktop/mnt/host/c:文件存在。
或者一些错误,当你认为你运行你的容器没有错误,但你惊讶于一个停止的容器后,列出运行/停止的容器。
通过记录集装箱
在绑定挂载卷中,我们确实知道文件夹存储在哪里,因为我们作为开发人员设置了容器的内部路径应该Map到我们的主机上的路径,这里是诀窍。
怎么写?看看这个链接
Mounting Docker volumes with Docker Toolbox for Windows
命令应该如下所示
-d以分离模式运行容器
--name给予容器命名
-p端口从主机上的(3000)转发到容器上的(80)
-v feedback:/app/feedback命名卷,即使我们停止容器也保留所有文件
-v“/C/Users/amine/Desktop/data-volumes/:/app”bind将主机目录挂载到容器目录
-v /app/node_modules在我们停止容器后保持/查找依赖的匿名卷
b52图像ID的前3个字母(您可以给予完整的ID/名称)
我希望你们能明白。