npm ENOENT:没有此类文件或目录,请打开“/usr/app/package.json”,尝试使用docker-compose与docker共享本地空间时

nzkunb0c  于 2022-12-22  发布在  Docker
关注(0)|答案(2)|浏览(154)

我正在尝试用我的Docker容器与Volume共享我的本地空间。顺便说一句,我正在开发一个嵌套应用程序。问题是每当我尝试启用Volume功能时,我都会遇到一些奇怪的错误!

api_1  | npm ERR! code ENOENT
api_1  | npm ERR! syscall open
api_1  | npm ERR! path /usr/app/package.json
api_1  | npm ERR! errno -2
api_1  | npm ERR! enoent ENOENT: no such file or directory, open '/usr/app/package.json'
api_1  | npm ERR! enoent This is related to npm not being able to find a file.
api_1  | npm ERR! enoent 
api_1  | 
api_1  | npm ERR! A complete log of this run can be found in:
api_1  | npm ERR!     /root/.npm/_logs/2020-05-24T19_44_36_593Z-debug.log

我称之为怪异,因为我还没有找到任何适当的解释这个错误.虽然这些链接是相当接近我的问题prob1prob2
我的 Docker 档案-

# Download base image
FROM node:alpine

# Define Base Directory
WORKDIR /usr/app

# Copy and restore packages
COPY ./package*.json ./
RUN npm install

# Copy all other directories
COPY ./ ./

# Setup base command
CMD [ "npm", "run", "start" ]

还有我的 Docker 文件

version: '3'
services: 
   api:
     build:
        context: .
        dockerfile: Dockerfile.dev
    ports : 
        - "4200:4500"
    volumes:
        - /usr/app/node_modules
        - /:/usr/app

据我所知,每当我试图使用卷意味着/:/usr/app取代docker目录与本地项目目录。但在我的项目根目录,我有package.json文件。同样在我的docker文件,我复制了package.json文件。
有没有人能帮我解决这个问题?我是Docker的新手,我这样做只是为了学习。

oogrdqng

oogrdqng1#

您应该将服务名称api更改为app。您在Docker compose中为服务选择的名称将是容器中的目录名称。因此,Docker引擎在src/usr/api中为您的应用创建一个目录,并将您的package.json放入其中。但是,基于Docker文件,它在src/usr/app中搜索package.json,因此抛出此错误。

ukqbszuj

ukqbszuj2#

当您将主机路径挂载到Docker内部的路径时,该路径中存在的文件将变得不可访问。您将文件复制到路径/usr/app。然后,当您运行容器时,您将在其上挂载一个空的主机路径。这就是文件丢失的原因。您应该做的是将所有内容复制到绑定挂载,然后挂载它。

相关问题