docker build 中的本地 npm 依赖“不包含 package.json 文件”,但使用 npm start 运行良好
Posted
技术标签:
【中文标题】docker build 中的本地 npm 依赖“不包含 package.json 文件”,但使用 npm start 运行良好【英文标题】:Local npm dependency "does not a contain a package.json file" in docker build, but runs fine with npm start 【发布时间】:2020-02-09 11:34:47 【问题描述】:我有一个我正在本地处理的 npm 模块,它是客户端应用程序中的一个依赖项。
目录结构基本如下:
/app
/client
/src
App.js
package.json
Dockerfile.dev
/shared
/contexts
package.json
test.js
/hooks
我的package.json
如下:
"name": "web",
"version": "0.1.0",
"private": true,
"dependencies":
"contexts": "file:../shared/contexts",
"react": "^16.10.2",
"react-dom": "^16.10.2",
"react-scripts": "3.2.0"
,
"scripts":
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
,
"eslintConfig":
"extends": "react-app"
,
"browserslist":
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
将以下内容导入client/src/App.js
:
import testImport from 'contexts/test';
当我运行 npm start
时按预期工作。
我遇到的问题是跑步:
docker build -t sockpuppet/testapp -f Dockerfile.dev .
它失败了,我得到一个错误:
npm ERR! Could not install from "../shared/contexts" as it does not contain a package.json file.
这是他的 Dockerfile.dev
FROM node:alpine
WORKDIR '/app'
COPY ./package.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "start"]
我应该如何处理本地 npm 依赖项?
此外,将类似以下内容添加到 COPY
和 /shared
到图像中会生成 COPY failed: Forbidden path outside the build context: ../shared/contexts ()
错误:
COPY ../shared ./
【问题讨论】:
你在层次结构中放置 Dockerfile 的位置? 你能显示你的 dockerfile,好像是上下文问题"../shared/contexts"
这脱离了 Dockerfile 的上下文,你没有在 Dockerfile 中复制,那么你是如何得到这个错误的
无论如何要解决这个问题?我唯一能想到的就是不要让它成为本地 npm 依赖项,但那样我就会失去这样做的好处。 COPY ../shared ./
确实会产生 outside build context
错误。
【参考方案1】:
好的,这行得通。我将Dockerfile.dev
更改为以下内容:
FROM node:alpine
WORKDIR '/app'
COPY ./shared /shared
COPY ./web /app
RUN npm install
CMD ["npm", "run", "start"]
从基础项目目录(/shared
和 /web
所在的位置),我运行:
docker build -t sockpuppet/client -f ./web/Dockerfile.dev .
【讨论】:
我没有看到 .web,它是从哪里来的?以上是关于docker build 中的本地 npm 依赖“不包含 package.json 文件”,但使用 npm start 运行良好的主要内容,如果未能解决你的问题,请参考以下文章
使用本地 npm 依赖项设置 docker nodejs 应用程序
npm install:有没有办法忽略 package.json 中的特定依赖项
Docker `npm install` 与 TypeScript 中的 GitHub 私有 repo 依赖项