我正在尝试用我的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
我称之为怪异,因为我还没有找到任何适当的解释这个错误.虽然这些链接是相当接近我的问题prob1,prob2
我的 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的新手,我这样做只是为了学习。
2条答案
按热度按时间oogrdqng1#
您应该将服务名称
api
更改为app
。您在Docker compose中为服务选择的名称将是容器中的目录名称。因此,Docker引擎在src/usr/api
中为您的应用创建一个目录,并将您的package.json放入其中。但是,基于Docker文件,它在src/usr/app
中搜索package.json,因此抛出此错误。ukqbszuj2#
当您将主机路径挂载到Docker内部的路径时,该路径中存在的文件将变得不可访问。您将文件复制到路径/usr/app。然后,当您运行容器时,您将在其上挂载一个空的主机路径。这就是文件丢失的原因。您应该做的是将所有内容复制到绑定挂载,然后挂载它。