当前位置: 首页 > 知识库问答 >
问题:

复制失败:生成上下文之外的禁止路径

莫英喆
2023-03-14

我有一个包含各种Go服务和库的monorepo。目录结构如下所示:

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

这<代码>开始。mod文件位于monorepo目录的根目录中,服务使用该文件中声明的依赖项。

我使用以下命令构建Docker图像:

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

当我尝试使用上述Docker命令从monorepo目录的根构建Docker图像时,我得到以下错误:

复制失败:生成上下文之外的禁止路径:/去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图像中,而不需要单独尝试。mod和go。monorepo内每项服务的金额?

共有2个答案

戚哲
2023-03-14

您可以使用docker compose构建和管理docker容器,然后可以使用help-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

Docker文件

FROM xxx
COPY copied_file.ext /target_folder/

生成或重建服务:

docker-compose build

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

docker-compose run your_service_name <command> [arguments]

贝礼骞
2023-03-14

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

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

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

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

 类似资料:
  • 我有以下文件夹结构: 我有我的micro-hr文件夹,其中是我的主包,我有一个本地lib,它是rabbitmq 这是我的dockerfile: docker撰写: 这是我的包裹。我的主包后端/微hr上的json: 我不知道我错在哪里,基本上我在我的主包中使用npm链接链接到我的lib,并尝试在docker中创建文件夹,但无济于事。 docker构建错误: 步骤6/10:复制/rabbitmq/包。

  • 我的本地服务器上有一个工作的Docker Compose,现在我必须转到prod,我只是复制了prod服务器上的整个目录,相同的目录结构、配置文件等。但是当我运行Docker Compose命令(Docker-Compose-f Docker-Compose.dev.yml up)时,它抛出了以下错误: 步骤 7/28 : 复制 ../../data_acquisition_survey_api/

  • 我有一个包含多个项目的解决方案。我想创建一个项目的docker映像,所以我通过docker支持添加了一个Dockerfile。我添加Dockerfile的项目对同一级别的其他项目具有构建依赖关系。当我尝试通过Docker运行项目时,我收到以下错误: 复制失败:生成上下文之外的禁止路径:/应用程序编程接口。常见的AspNetCore/API。常见的AspNetCore。csproj() C: \用户

  • 我正在尝试将一个dockerfile放入我的主启动项目的子目录中。有一个称为的依赖项项目。当dockerfile位于的根目录中时,所有文件都正常工作,但当它嵌套在的子目录中时,它将失败 这对我来说是有意义的,因为它嵌套在子目录中,所以我只是在COPY命令前面添加了一个“../”,但这会导致以下上下文异常: 好的,这也是有意义的,因为docker文档说明上下文从dockerfile所在的地方开始,但

  • 我一直在尝试调试这个错误,但没有成功。 本质上,我是通过我的应用程序联系外部应用程序的。连接建立良好,应用程序通过回调URL联系回我的应用程序,然后我需要向外部应用程序发送最终验证。最后一步由于SSLhandshajee异常而失败。 javax。网ssl。例外:太阳。安全验证器。ValidatorException:PKIX路径生成失败:sun。安全供应商。certpath。SunCertPath