无法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命令的预期行为一致。

挂载一个主机目录作为数据卷 。正如文档所说的,主机目录的预先存在的内容不会被删除,但是没有关于容器的存在目录上正在进行的信息。

有一个例子支持我的意见。

  1. Dockerfile

    FROM alpine:latest WORKDIR /usr/src/app COPY . .

  2. 我在Dockerfile的相同目录中创build一个test.t文件。

  3. certificate

    1. 运行命令docker build -t test-1 .
    2. 运行命令docker run --name test-c-1 -it test-1 /bin/sh ,然后你的容器会打开bash。
    3. 在你的容器bash中运行命令ls -l ,它会显示test.t文件。
    4. 只需使用相同的图像。
    5. 运行命令docker run --name test-c-2 -v /home:/usr/src/app -it test-1 /bin/sh 。 您无法在test-c-2容器中find文件test.t。

就是这样,我希望它能帮助你。