docker - 复制 npmrc 时 Docker compose 失败
问题描述
尝试使用 docker compose 运行我的 docker 时出现此错误
=> 错误 [6/9] COPY .npmrc .npmrc
0.0s => 错误 [7/9] 添加 package.json /Users/gs/Documents/Dev/DockerDi 0.0s
version: "3"
services:
gs-service:
build:
context: .
dockerfile: ./gs/Dockerfile
ports:
- 8081:8081
ui-service:
build:
context: .
dockerfile: ./ui/Dockerfile
ports:
- 8083:8083
这是失败的 Dockerfile 的详细信息。这是一个子目录。例如/user/gs/dockerexperiment/ui
docker-compose 文件位于父目录中。例如
/user/gs/dockerexperiment
Dockerfile 位于子目录中。例如
/user/gs/dockerexperiment/ui
我知道课程路径出了点问题,但我很难弄清楚我错过了什么
解决方案
Dockerfile 在构建上下文上运行;这是您build: { context: }
在docker-compose.yml
文件中命名的目录树的副本(或者,如果您docker build
直接使用它的目录参数)。
build:
context: .
在 Dockerfile 中,任何COPY
(或ADD
)指令都被解释为相对于该目录树。(如果它看起来像一个绝对路径,它仍然是相对于这个目录的;任何..
会超出这个目录的路径步骤都会被忽略。)
COPY package*.json ./
# copies ./package.json, relative to the context directory
但是,您在评论中澄清,这实际上不是您的文件所在的位置。相对于docker-compose.yml
文件,你需要./ui/package.json
; Dockerfile 也在同一个子目录中。
您显示的 Dockerfile 似乎不需要来自其直接树之外的任何内容,因此解决此问题的最简单方法是将ui
目录设置为构建上下文:
version: '3.8'
services:
ui:
build: ./ui
# Same as
# build:
# context: ./ui
# dockerfile: Dockerfile # relative to the context directory
ports:
- 8085:8085
在 Dockerfile 中,你可以删除重复的ADD package.json
行,你应该删除危险的RUN npm set config
行。你也可以设置一个更短的WORKDIR
,比如/app
典型的。
如果您不想更改docker-compose.yml
文件,另一个可能的更改是调整 Dockerfile 以使其COPY
路径相对于(父)构建上下文目录。
COPY ui/package*.json .
这样做的好处是您可以根据需要从其他应用程序访问文件,或者您可以将共享文件存储在该父目录中。
FROM node:14
# Add the public TLS key for our internal repository
# (from the parent directory)
COPY repository.example.com.crt /usr/local/share/ca-certificates
RUN update-ca-certificates
WORKDIR /app
# Also get our local npm configuration (from the parent directory)
COPY .npmrc .
# Install the ./ui application
COPY ui/package*.json .
RUN npm ci
COPY ui/src ./src
EXPOSE 8085
CMD ["npm", "start"]
推荐阅读
- r - 在R中减慢gganimate
- css - 在 IE 中,如何不重复地指定一堆仅列号不同的 div 的列号?
- go - 将超过 7 天的数据插入分区 BigQuery 表
- sql - 如何在 SQL Replace 函数中传递大的 string_replacement
- java - 如何将带有其他对象数组的对象从一个片段传递到另一个片段?
- javascript - 使用Javascript将具有相同日期的数组中的对象组合成新的对象数组
- javascript - 从比较 getComputedStyle().width 值的函数返回意外的真值
- visual-c++ - 使用已知数据从 exe 读取
- c# - 有什么方法可以识别手动添加的引用与 Nuget 包添加的引用?
- python - 从 Pandas 中的 csv 文件创建数据框:列问题