使用不同的目录上下文构建Docker映像

Lui*_*ril 2 docker docker-compose

我当前的项目包括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
Run Code Online (Sandbox Code Playgroud)

现在,我能够使用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
Run Code Online (Sandbox Code Playgroud)

可以看出,dotnetcoreservice的上下文位于主目录级别。因此,针对该特定映像的Dockerfile需要将上下文的完整路径作为目标,如下所示:

#escape=`
FROM microsoft/dotnet:2.0-sdk AS build
WORKDIR /app
COPY Project1/ ./Project1/
COPY Util/ ./Util/
RUN dotnet build Project1/DotNetCoreService/
Run Code Online (Sandbox Code Playgroud)

在本地目录级别通过docker-compose命令调用此dockerfile时,该文件成功运行,但是在通过该docker build .\Project1\DotNetCoreService\.docker\命令调用时,它失败并显示以下消息:

COPY失败:stat / var / lib / docker / tmp / docker-builder241915396 / Project1:没有此类文件或目录

我认为这是实际上下文的问题,因为docker build指令会自动将上下文设置为Dockerfile所在的位置。我希望能够使用相同的目录结构docker-compose build通过和docker build指令创建图像。

这可能吗?

tri*_*117 5

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

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

  • 如果我要使用的 dockerfile 不是当前文件夹的子目录怎么办? (2认同)