Skip to content
GitLab
Next
    • GitLab: the DevOps platform
    • Explore GitLab
    • Install GitLab
    • How GitLab compares
    • Get started
    • GitLab docs
    • GitLab Learn
  • Pricing
  • Talk to an expert
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
    Projects Groups Snippets
  • Sign up now
  • Login
  • Sign in / Register
  • gitlab-runner gitlab-runner
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 2,609
    • Issues 2,609
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
    • Requirements
  • Merge requests 104
    • Merge requests 104
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Metrics
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • GitLab.orgGitLab.org
  • gitlab-runnergitlab-runner
  • Issues
  • #4295
Closed
Open
Issue created May 29, 2019 by Maikel Wever@maikelwever

Support named pipes for Windows Docker executor

Summary

Named pipes cannot be specified as volumes in config.toml, when using the docker-windows executor on Windows.

Steps to reproduce

  • Install GitLab runner on Windows and use the windows-docker runner in combination with Windows Containers.
  • Set the following volume mounts in config.toml:
    volumes = ["c:\\cache", "\\\\.\\pipe\\docker_engine:\\\\.\\pipe\\docker_engine"]
  • Run a build on the runner.

.gitlab-ci.yml is not relevant for this issue.

Actual behavior

The runner fails to spawn the Docker container and errors out.

Expected behavior

The build runs as normal and \\.\pipe\docker_engine exists and is usable inside the container.

Relevant logs and/or screenshots

parsed config.toml output from --debug flag
Configuration loaded                                builds=0
listenaddress: ""
sessionserver:
  listenaddress: ""
  advertiseaddress: ""
  sessiontimeout: 1800
concurrent: 1
checkinterval: 0
loglevel: null
logformat: null
user: ""
runners:
- name: name
  limit: 0
  outputlimit: 0
  requestconcurrency: 0
  runnercredentials:
    url: https://url/
    token: token
    tlscafile: ""
    tlscertfile: ""
    tlskeyfile: ""
  runnersettings:
    executor: docker-windows
    buildsdir: c:\builds
    cachedir: ""
    cloneurl: ""
    environment: []
    preclonescript: ""
    prebuildscript: ""
    postbuildscript: ""
    debugtracedisabled: false
    shell: ""
    custombuilddir:
      enabled: false
    ssh: null
    docker:
      dockercredentials:
        host: ""
        certpath: ""
        tlsverify: false
      hostname: ""
      image: mcr.microsoft.com/windows/servercore:ltsc2019
      runtime: ""
      memory: ""
      memoryswap: ""
      memoryreservation: ""
      cpusetcpus: ""
      cpus: ""
      dns: []
      dnssearch: []
      privileged: false
      disableentrypointoverwrite: false
      usernsmode: ""
      capadd: []
      capdrop: []
      oomkilldisable: false
      securityopt: []
      devices: []
      disablecache: false
      volumes:
      - c:\cache
      - \\.\pipe\docker_engine:\\.\pipe\docker_engine
      volumedriver: ""
      cachedir: ""
      extrahosts: []
      volumesfrom: []
      networkmode: ""
      links: []
      services: []
      waitforservicestimeout: 0
      allowedimages: []
      allowedservices: []
      pullpolicy: ""
      shmsize: 0
      tmpfs: {}
      servicestmpfs: {}
      sysctls: {}
      helperimage: ""
    parallels: null
    virtualbox: null
    cache:
      type: ""
      path: ""
      shared: false
      s3:
        serveraddress: ""
        accesskey: ""
        secretkey: ""
        bucketname: ""
        bucketlocation: ""
        insecure: false
      gcs:
        cachegcscredentials:
          accessid: ""
          privatekey: ""
        credentialsfile: ""
        bucketname: ""
    machine: null
    kubernetes: null
sentrydsn: null
modtime: 2019-05-29T17:32:48.6935282Z
loaded: true
  builds=0
listen_address not defined, metrics & debug endpoints disabled  builds=0
[session_server].listen_address not defined, session endpoints disabled  builds=0
Starting worker                                     builds=0 worker=0
Feeding runners to channel                          builds=0
job log

Creating user-defined volumes...                    job=6175 project=132 runner=5XQ5vjxC
Using container "766bbc3b152587d9579442eba79fd6e3910377ece413f0673dcce390603e6723" as cache "c:\\cache"...  job=6175 project=132 runner=5XQ5vjxC
Using host-based "\\\\.\\pipe\\docker_engine" for "c:\\builds\\test\\dindw\\pipe\\docker_engine"...  job=6175 project=132 runner=5XQ5vjxC
Creating build volume...                            job=6175 project=132 runner=5XQ5vjxC
Using container "1866bcdb394fe09a3a096553d0bd21d23845d729ec5e056401e5ed74fc578caa" as cache "c:\\builds"...  job=6175 project=132 runner=5XQ5vjxC
Creating services...                                job=6175 project=132 runner=5XQ5vjxC
Starting Docker command...                          job=6175 project=132 runner=5XQ5vjxC

# Some parts stripped that are not relevant

Creating container runner-5XQ5vjxC-project-132-concurrent-0-predefined-0 ...  job=6175 project=132 runner=5XQ5vjxC
ERROR: Job failed (system failure): Error response from daemon: invalid volume specification: '\\.\pipe\docker_engine:c:\builds\test\dindw\pipe\docker_engine': invalid mount config for type "npipe": 'c:\builds\test\dindw\pipe\docker_engine' is not a valid pipe path (executor_docker.go:726:0s)  duration=279.0968ms job=6175 project=132 runner=5XQ5vjxC
Appending trace to coordinator... ok                code=202 job=6175 job-log=0-1037 job-status=running runner=5XQ5vjxC sent-log=0-1036 status=202 Accepted
Submitting job to coordinator... ok                 code=200 job=6175 job-status= runner=5XQ5vjxC
ERROR: Failed to process runner                     builds=0 error=Error response from daemon: invalid volume specification: '\\.\pipe\docker_engine:c:\builds\test\dindw\pipe\docker_engine': invalid mount config for type "npipe": 'c:\builds\test\dindw\pipe\docker_engine' is not a valid pipe path (executor_docker.go:726:0s) executor=docker-windows runner=5XQ5vjxC
Feeding runners to channel                          builds=0
Checking for jobs... nothing                        runner=5XQ5vjxC

Environment description

Windows Server 2019 Datacenter edition (with containers) image from Azure. Using Windows Containers.

config.toml contents
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "name"
  url = "https://url/"
  token = "token"
  executor = "docker-windows"
  builds_dir = "c:\\builds"
  [runners.custom_build_dir]
  [runners.docker]
    tls_verify = false
    image = "mcr.microsoft.com/windows/servercore:ltsc2019"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["c:\\cache", "\\\\.\\pipe\\docker_engine:\\\\.\\pipe\\docker_engine"]
    shm_size = 0
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

Used GitLab Runner version

11.11.0 and 11.11.1 have issues with all volume mounts (not only named pipes), so I used this build instead: https://gitlab-runner-downloads.s3.amazonaws.com/make-volumes-to-work-on-linux-docker-on-windows/index.html

.\gitlab-runner.exe --version
Version:      11.12.0~beta.1532.g22b4c488
Git revision: 22b4c488
Git branch:   make-volumes-to-work-on-linux-docker-on-windows
GO version:   go1.8.7
Built:        2019-05-29T10:31:00+0000
OS/Arch:      windows/amd64

Proof that this works without GitLab Runner

docker run --rm -it --isolation=hyperv -v \\.\pipe\docker_engine:\\.\pipe\docker_engine mcr.microsoft.com/windows/servercore:1809

References

!1363 (comment 175944817)

#4264 (comment 174327892)

Possible fixes

Runner should not rewrite the path but keep it intact as specified.

Edited May 29, 2019 by Steve Azzopardi
Assignee
Assign to
Time tracking