无法finde模块“明确”(与docker的节点应用程序)
我是一个新手与Docker,我试图从NodeJS开始,所以这里是我的问题..
我的项目中有这个Dockerfile:
FROM node:argon # Create app directory RUN mkdir -p /home/Documents/node-app WORKDIR /home/Documents/node-app # Install app dependencies COPY package.json /home/Documents/node-app RUN npm install # Bundle app source COPY . /home/Documents/node-app EXPOSE 8080 CMD ["npm", "start"]
当我运行一个容器与docker run -d -p 49160:8080 node-container
它工作正常..
但是,当我尝试映射我的主机项目与容器目录( docker run -p 49160:8080 -v ~/Documentos/nodeApp:/home/Documents/node-app node-cont
)不起作用。
我得到的错误是: Error: Cannot find module 'express'
我已经尝试过从相关问题的其他解决scheme,但似乎没有为我工作(或者我知道..我只是太新手了)
谢谢 !!
当你使用-v标志运行你的容器时,这意味着从你的Docker引擎的主机将一个目录挂载到一个容器中,将会覆盖你在/ home / Documents / node-app中执行的操作 ,比如npm install。
所以你看不到容器中的node_modules目录 。
$ docker run -d -P –name web -v / src / webapp:/ webapp training / webapp python app.py
该命令将主机目录/ src / webapp安装到/ webapp的容器中。 如果path/ web应用程序已经存在于容器的映像中,那么/ src / webapp挂载会覆盖,但不会删除预先存在的内容。 一旦挂载被删除,内容可以再次访问。 这与mount命令的预期行为一致。
挂载一个主机目录作为数据卷 。正如文档所说的,主机目录的预先存在的内容不会被删除,但是没有关于容器的存在目录上正在进行的信息。
有一个例子支持我的意见。
-
Dockerfile
FROM alpine:latest WORKDIR /usr/src/app COPY . .
-
我在Dockerfile的相同目录中创build一个test.t文件。
-
certificate
- 运行命令
docker build -t test-1 .
- 运行命令
docker run --name test-c-1 -it test-1 /bin/sh
,然后你的容器会打开bash。 - 在你的容器bash中运行命令
ls -l
,它会显示test.t文件。 - 只需使用相同的图像。
- 运行命令
docker run --name test-c-2 -v /home:/usr/src/app -it test-1 /bin/sh
。 您无法在test-c-2容器中find文件test.t。
- 运行命令
就是这样,我希望它能帮助你。