gpt4 book ai didi

docker - 使用不同的目录上下文构建 docker 镜像

转载 作者:行者123 更新时间:2023-12-04 23:37:30 25 4
gpt4 key购买 nike

我当前的项目包括一个 mongo 服务器、一个 rabbitmq 服务器和一个 dotnet 核心服务。它的结构如下:

.
├── project1.docker-compose.yml #multiple docker-compose files for all projects
├── .dockerignore
├── Util/
| └── some common code across all projects
└── Project1/ #there are multiple projects at the same level with the same structure
├── .docker/
| ├── mongodb
| | └──Dockerfile
| └── rabbitmq
| └──Dockerfile
├── BusinessLogicClasses/
| └── some classes that contain my business logic
└── DotNetCoreService/
├── my service code
└── .docker
└──Dockerfile

现在我可以使用 docker-compose 命令成功地为 mongodb、rabbitmq 和 dot net core 构建图像。 docker-compose.yml 位于主目录级别,因为我的不同项目(在本例中为 Project1)引用了在 Util 目录下找到的代码。因此,我需要能够提供一个位于两个目录之上的上下文,以便我可以在 Dockerfile 上使用 COPY 操作。

我的基本 project1.docker-compose.yml 如下(我排除了不重要的部分)
version: '3'
services:
rabbitmq:
build:
context: Project1/.docker/rabbitmq/

mongodb:
build:
context: Project1/.docker/mongodb/

dotnetcoreservice:
build:
context: ./
dockerfile: Project1/DotNetCoreService/.docker/Dockerfile

可以看出,dotnetcoreservice 的上下文位于主目录级别。因此,我针对该特定图像的 Dockerfile 需要针对上下文中的完整路径,如下所示:
#escape=`
FROM microsoft/dotnet:2.0-sdk AS build
WORKDIR /app
COPY Project1/ ./Project1/
COPY Util/ ./Util/
RUN dotnet build Project1/DotNetCoreService/

这个 dockerfile 在主目录级别通过 docker-compose 命令调用时成功工作,但是当通过 docker build .\Project1\DotNetCoreService\.docker\ 调用时命令它失败并显示以下消息:

COPY failed: stat /var/lib/docker/tmp/docker-builder241915396/Project1: no such file or directory



我认为这是实际情况的问题,因为 docker build指令自动将上下文设置为 Dockerfile 所在的位置。我希望能够使用相同的目录结构来创建带有 docker-compose build 的图像。以及 docker build指示。

这有可能吗?

最佳答案

使用标志 -f设置自定义路径

示例:docker build --rm -t my-app -f path/to/dockerfile .

关于docker - 使用不同的目录上下文构建 docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49161827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com