Docker Volume:ENOENT:没有这样的文件或目录,打开'/app/package.json'

我使用Docker Toolbox来使用Docker,因为我拥有Windows Home。我使用以下方法制作了一个React应用程序:

npx create-react-app frontend

因此,我制作了一个“ Dokerfile.dev”文件,在该文件中,我说doicker使用基础映像节点的高山版本,设置工作目录“ / app”,以复制需要安装节点“ run npm install”的“ package.json”,并且然后我说要复制其他文件。启动该容器时,我还要启用命令:

FROM node:alpine

WORKDIR '/app'

COPY package.json .
RUN npm install
COPY . .

CMD ["npm","run","start"]

似乎工作,因为如果我建立:

docker build -f Dockerfile.dev .

并运行它以将容器端口映射到本地端口(3000):

docker run -it -p 3000:3000 [containerID]

it works on http://192.168.99.100:3000, react page working.

之后,我想尝试使用音量运行。实际上,我从“ app”文件夹中删除了node_modules依赖项,因为npm安装了它的两倍。我把它像一个占位符。相反,我将当前工作目录(pwd)映射为“ / app”:

docker ruyn -it -p 3000:3000 -v /app/node_modules -v /c/Program\ Files/Docker\ Toolbox/frontend:/app -e CHOKIDAR_USEPOLLING=true a631964d87b2

(我的pwd包含空格,因此我必须使用“ \”代替“”。“ a631964d87b2”是我的容器ID)

结果是:

npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /app/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-05-23T20_10_26_143Z-debug.log

为什么在没有Volume的情况下可以工作,而是使用volume却找不到/app/package.json?这是不可能的,因为在Dockerfile.dev中我说:

COPY package.json .

因此将package.json复制到当前的工作目录“ / app”。

enter image description here

-更新

实际上,如果我在c:/ Users / username中移动项目,它就可以工作

我发短信:

docker run -it -p 3000:3000 -v /app/node_modules -v $(pwd):/app -e CHOKIDAR_USEPOLLING=true a631964d87b2  

这是因为$(pwd)放置了我的“当前工作目录”,在这种情况下,其中没有空格。如何将我的计划工作目录与名称空间放在一起?

-更新2

问题不是空格:我试图在c:/ Users / username / abc \ frontend中修改c:/ Users / username / frontend

而且仍然有效。看来项目必须在用户中,而不是在程序文件中 ?

评论