【问题标题】:COPY failed: Forbidden path outside the build context复制失败:构建上下文之外的禁止路径
【发布时间】:2020-07-26 12:18:20
【问题描述】:

我有一个包含各种 Go 服务和库的 monorepo。它的结构为

monorepo
 services 
  service-a 
   - Dockerfile
go.mod
go.sum

我的 go.mod 位于 monorepo 的根目录中,服务使用 go.mod 文件中所述的依赖项。

我使用构建 Docker 映像

docker build -t some:tag ./services/service-a/

当我尝试使用上述 docker 命令从 monorepo 的根目录构建我的 Docker 映像时,我收到以下错误。

复制失败:构建上下文之外的禁止路径:../../go.mod ()

下面是我的 Dockerfile

FROM golang:1.14.1-alpine3.11

RUN apk add --no-cache ca-certificates git

# Enable Go Modules
ENV GO111MODULE=on

# Set the Current Working Directory inside the container
WORKDIR /app

# Copy go mod and sum files
COPY ../../go.mod go.sum ./

RUN go mod download

COPY . .

RUN CGO_ENABLED=0 go build -o service-a

ENTRYPOINT ["/app/service-a"]

我必须做些什么才能将不在当前目录中的文件添加到我的 Docker 映像中,而不必在 monorepo 中的每个服务中都有单独的 go.mod 和 go.sum 吗?

【问题讨论】:

    标签: docker go


    【解决方案1】:

    Docker 只允许从上下文向镜像添加文件,默认情况下,上下文是包含 Dockerfile 的目录。您可以在构建时指定不同的上下文,但同样,它不允许您包含该上下文之外的文件:

    docker build -f ./services/service-a/Dockerfile .
    

    这应该使用当前目录作为上下文。

    或者,您可以创建一个临时目录,复制那里的所有工件并将其用作构建上下文。这可以通过生成文件或构建脚本自动完成。

    【讨论】:

      【解决方案2】:

      你可以使用docker-compose来构建和管理你的docker容器,那么这个问题可以通过context指令来解决,例如:

      project_folder  
      ├─── src  
      │    └── folder1
      │        └── folder2
      │            └── Dockerfile
      ├── docker-compose.yaml   
      └── copied_file.ext 
      

      docker-compose.yaml

      version: '3'
      services:
      
          your_service_name:
              build:
                  context: ./ #project_folder for this case
                  dockerfile: ./src/folder1/folder2/Dockefile
      

      Dockerfile

      FROM xxx
      COPY copied_file.ext /target_folder/
      

      构建或重建服务:

      docker-compose build
      

      在服务上运行一次性命令:

      docker-compose run your_service_name <command> [arguments]
      

      【讨论】:

        猜你喜欢
        • 2019-10-04
        • 1970-01-01
        • 1970-01-01
        • 2016-02-25
        • 2021-02-28
        • 2014-09-05
        • 2020-06-01
        • 2019-05-03
        • 2016-02-14
        相关资源
        最近更新 更多