Docker 卷:ENOENT:没有那个文件或目录,打开“/app/package.json”
Docker Volume: ENOENT: no such file or directory, open '/app/package.json'
我正在使用 Docker 和 Docker 工具箱,因为我有 Windows 主页。我使用以下方法制作了一个 React 应用程序:
npx create-react-app frontend
因此我制作了一个 "Dokerfile.dev" 文件,其中我说 doicker 使用基本图像节点 alpine 版本,设置工作目录“/app”,以复制需要安装节点 [=] 的 "package.json" 67=],然后我说复制其他文件。当我启动该容器时,我还放置了要启用的命令:
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]
它适用于 http://192.168.99.100:3000,反应页面正常。
之后,我想尝试 运行 使用音量。实际上我从 "app" 文件夹中删除了 node_modules 依赖项,因为 npm install double。我把它当作占位符。相反,我将当前工作目录 (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
(我的密码包含空格,因此我必须使用“\”而不是“”。"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
为什么它在没有音量的情况下工作,而不是使用音量它说找不到 /app/package。json?这是不可能的,因为在 Dockerfile.dev 我说:
COPY package.json .
从而将package.json复制到当前工作目录“/app”。
--- 更新
实际上,如果我将项目移入 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
它仍然有效。看来项目必须在用户中而不是在程序文件中
?
问题是项目在 Window Users 文件夹之外,实际上它在 Program Files 中。尝试在 Users/myUser 中移动它,它也可以使用带有空格的路径
我正在使用 Docker 和 Docker 工具箱,因为我有 Windows 主页。我使用以下方法制作了一个 React 应用程序:
npx create-react-app frontend
因此我制作了一个 "Dokerfile.dev" 文件,其中我说 doicker 使用基本图像节点 alpine 版本,设置工作目录“/app”,以复制需要安装节点 [=] 的 "package.json" 67=],然后我说复制其他文件。当我启动该容器时,我还放置了要启用的命令:
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]
它适用于 http://192.168.99.100:3000,反应页面正常。
之后,我想尝试 运行 使用音量。实际上我从 "app" 文件夹中删除了 node_modules 依赖项,因为 npm install double。我把它当作占位符。相反,我将当前工作目录 (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
(我的密码包含空格,因此我必须使用“\”而不是“”。"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
为什么它在没有音量的情况下工作,而不是使用音量它说找不到 /app/package。json?这是不可能的,因为在 Dockerfile.dev 我说:
COPY package.json .
从而将package.json复制到当前工作目录“/app”。
--- 更新
实际上,如果我将项目移入 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它仍然有效。看来项目必须在用户中而不是在程序文件中 ?
问题是项目在 Window Users 文件夹之外,实际上它在 Program Files 中。尝试在 Users/myUser 中移动它,它也可以使用带有空格的路径