docker / buildx

Docker CLI plugin for extended build capabilities with BuildKit
Apache License 2.0
3.56k stars 481 forks source link

Using docker-compose with Windows Containers and dockerfile_inline does not work (is ignored) #2737

Open sikhness opened 3 weeks ago

sikhness commented 3 weeks ago

Contributing guidelines

I've found a bug and checked that ...

Description

I originally created this issue here in the compose repository, and I was told to re-open the issue here since compose is just passing through the content of dockerfile_inline to buildx.

Let me describe the issue in detail here as well: When I'm using docker-compose for Windows containers (specifically on Windows Server 2022), if I define a compose file that has dockerfile_inline set, it just seems to ignore it and throws the following error:

unable to prepare context: unable to evaluate symlinks in Dockerfile path: CreateFile C:\Users\Administrator\Documents\Docker Config\Windows\Test\Dockerfile: The system cannot find the file specified.

Here is the example docker-compose file that I am using:

services:
  test:
    container_name: test
    image: test:latest
    build:
      dockerfile_inline: |
        FROM mcr.microsoft.com/windows/server:ltsc2022
        RUN powershell.exe
    restart: unless-stopped
    networks:
      - test
    hostname: test

networks:
  test:
    name: test

Expected behaviour

Docker should be using the content of dockerfile_inline to build the image instead of looking for a Dockerfile specifically

Actual behaviour

Docker looks for a Dockerfile in the directory structure instead as shown in the following error:

unable to prepare context: unable to evaluate symlinks in Dockerfile path: CreateFile C:\Users\Administrator\Documents\Docker Config\Windows\Test\Dockerfile: The system cannot find the file specified.

Buildx version

This command doesn't resolve (is no buildx installed on Windows Server)?

Docker info

Client: Version: 27.2.0 Context: default Debug Mode: false

Server: Containers: 2 Running: 2 Paused: 0 Stopped: 0 Images: 18 Server Version: 27.2.0 Storage Driver: windowsfilter Windows: Logging Driver: json-file Plugins: Volume: local Network: ics internal l2bridge l2tunnel nat null overlay private transparent Log: awslogs etwlogs fluentd gcplogs gelf json-file local splunk syslog Swarm: inactive Default Isolation: process Kernel Version: 10.0 20348 (20348.1.amd64fre.fe_release.210507-1500) Operating System: Microsoft Windows Server Version 21H2 (OS Build 20348.2655) OSType: windows Architecture: x86_64 CPUs: 16 Total Memory: 79.72GiB Name: HOME-SERVER ID: 4c099b0a-063e-4e68-a9ab-df005617efb5 Docker Root Dir: C:\ProgramData\docker Debug Mode: false Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false Product License: Community Engine

Builders list

This command doesn't resolve (is no buildx installed on Windows Server)? If not, is this a requirement for dockerfile_inline to work and how do we set it up on Windows Server?

Configuration

services: test: container_name: test image: test:latest build: dockerfile_inline: | FROM mcr.microsoft.com/windows/server:ltsc2022 RUN powershell.exe restart: unless-stopped networks:

networks: test: name: test

Build logs

No response

Additional info

No response

tonistiigi commented 3 weeks ago

cc @profnandaa

profnandaa commented 3 weeks ago

@tonistiigi -- thanks for the heads-up. Backlogged it, will take a look.