Compose: docker compose volume mounts not work on Windows

Created on 7 Jan 2017  ·  40Comments  ·  Source: docker/compose

When running docker-compose up, we get this error:

ERROR: for dockerapp  Cannot create container for service dockerapp: Invalid bind mount spec "C:\\Users\\nidal\\dockerapp\\app:/app:rw": Invalid volume specification: 'C:\Users\nidal\dockerapp\app:/app:rw'
ERROR: Encountered errors while bringing up the project.

The docker-compose file is attached below

version: '2'
services:
  dockerapp:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - ./app:/app

  redis:
    image: redis:3.2.0

We get the error both on Docker for Windows and Docker toolbox running on Windows.

$ docker version
Client:
 Version:      1.12.5
 API version:  1.24
 Go version:   go1.6.4
 Git commit:   7392c3b
 Built:        Fri Dec 16 06:14:34 2016
 OS/Arch:      windows/amd64

Server:
 Version:      1.12.5
 API version:  1.24
 Go version:   go1.6.4
 Git commit:   7392c3b
 Built:        Fri Dec 16 06:14:34 2016
 OS/Arch:      linux/amd64
$ docker-compose version
docker-compose version 1.9.0, build 2585387
docker-py version: 1.10.6
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2h  3 May 2016
$docker-compose --verbose config
compose.config.config.find: Using configuration files: .\docker-compose.yml
networks: {}
services:
  dockerapp:
    build:
      context: C:\Users\nidal\dockerapp
    ports:
    - 5000:5000
    volumes:
    - C:\Users\nidal\dockerapp\app:/app:rw
  redis:
    image: redis:3.2.0
version: '2.0'
volumes: {}
arevolumes grouwindows-client

Most helpful comment

  1. On Command Line: "_set COMPOSE_CONVERT_WINDOWS_PATHS=1_";
  2. Restart Docker for Windows;
  3. Go to Docker for Windows settings > Shared Drives > Reset credentials > select drive > Apply;
  4. Reopen Command Line;
  5. Kill the _Containers_;
  6. Rerun the _Containers_.

All 40 comments

We made a .env file in same directory as docker-compose.yml file

and added COMPOSE_CONVERT_WINDOWS_PATHS=1

we have also tried this to be true.

but still getting below error.

ABHISHEK@WindowsAbhi MINGW64 ~/Desktop/docker/dockerapp-releases/dockerapp-0.4/dockerapp-0.4
$ docker-compose up
dockerapp04_redis_1 is up-to-date
Creating dockerapp04_dockerapp_1

ERROR: for dockerapp Cannot create container for service dockerapp: Invalid bind mount spec "C:\Users\ABHISHEK\Desktop\docker\dockerapp-releases\dockerapp-0.4\do
ckerapp-0.4\app:/app:rw": Invalid volume specification: 'C:\Users\ABHISHEK\Desktop\docker\dockerapp-releases\dockerapp-0.4\dockerapp-0.4\app:/app:rw'
←[31mERROR←[0m: Encountered errors while bringing up the project.

Is there a better way to do COMPOSE_CONVERT_WINDOWS_PATHS or any other workaround.

Just type "export COMPOSE_CONVERT_WINDOWS_PATHS=1" and it will work until reboot.

Any reason this was closed? I've created a system environment variable and tried the .env file but still no avail.

It's not closed, but that particular issue should be resolved. Make sure your Compose version is up to date and your docker-compose.yml is correct.

I have the same issue on Windows 10. I use docker-compose version 1.11.2, build f963d76f and Docker version 17.03.1-ce, build c6d412e and this repo https://github.com/b00giZm/docker-compose-nodejs-examples/tree/master/00-basic-express-generator with correct Dockerfile and docker-compose.yml when i run docker-inspect i get this info: https://www.pastiebin.com/593bc096af354 but when i go inside to container and run ls /src i get this:

root@930bfd8a7df0:/src# ls
node_modules  package.json

i can't find app directory inside container.
But when i run:

PS D:\00-basic-express-generator> docker run --rm -v c:/Users:/data alpine ls /data
Administrator
All Users
Default
Default User 

volumes is working great

Is there any solution how to fix this bug in docker-compose?

One and a half months... is there a solution yet?

Running Docker 17.06.0-ce-win19 (12801) on Windows 10 using Visual Studio 2017 I ran into this thing.
I saw the "create e .env file" tip but on Window you cannot have a file with no name?

Yes, you can. At least on Windows 10.

@rolandwolters You cannot have a file without a filename in Explorer. But you can open a Powershell, navigate to your project directory and type:

mv e.env .env

If you're still having issues, please make sure your shared drives are configured properly: https://blogs.msdn.microsoft.com/stevelasker/2016/06/14/configuring-docker-for-windows-volumes/

It worked for me with COMPOSE_CONVERT_WINDOWS_PATHS=1, but I had to shut down all containers docker-compose stop, not just the one who uses it.

I've used , in a CMD window, SET COMPOSE_CONVERT_WINDOWS_PATHS=1 and it suddenly starting working. Remember to open a new CMD window.

I just discovered the "Reset Credentials..." button in the Shared Drive settings, which solved the issue for me. In my case the volume suddenly stopped working after disabling+enabling Hyper-V. Resetting the credentials for the shared drives fixed it again

@jaspervandaele, thanks a lot, this fixed my issue too. The error message Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type I was facing was so generic that I was wondering what was wrong. As I changed my Windows credentials recently, this is what caused this error. I wished there was something more explicit in case the mounted volume cannot be accessed at all

@rolandwolters You can bypass the Windows Explorer naming restriction by adding an extra . at the end. So renaming a file and typing ".env." results in .env, ".gitignore." becomes .gitignore, etc.

@jaspervandaele thanks for that- solved it for me.

  1. On Command Line: "_set COMPOSE_CONVERT_WINDOWS_PATHS=1_";
  2. Restart Docker for Windows;
  3. Go to Docker for Windows settings > Shared Drives > Reset credentials > select drive > Apply;
  4. Reopen Command Line;
  5. Kill the _Containers_;
  6. Rerun the _Containers_.

@gersondinis there is no option in settings for Shared Drives when Docker CE is running in Windows mode...unless I'm missing something using edge release:

image

Try to change from edge version to stable version on _Daemon_ tab.
You should see something like this:
https://cdn-enterprise.discourse.org/docker/uploads/default/optimized/2X/d/df575b41215fb89a1f79f6bf8f0864b7366e9955_1_690x312.png

If it doesn't, try to _upgrade/update_ your Docker for Windows.

@gersondinis Thanks!, that solved my problem!

@gersondinis latest version of CE and stable version...this is all I get:

image

@gersondinis Sir your a life saver!
for me it wasnt the environment variable, it was due to changing windows password, thanks you sir!

This did not solve the problem for me. I still run into issues trying to mount files to my docker-compose

I'm also having problems mounting volumes on Windows containers (it works fine in Linux containers).
I tried everything in this thread. I also tried relative and absolute paths.

Whenever I try to mount volumes on Windows Containers I get:

ERROR: Cannot create container for service builder: invalid volume specification: 'D:\project\docker-env\dist:/dist:rw'

I don't think /dist is a valid Windows path.

On Command Line: "_set COMPOSE_CONVERT_WINDOWS_PATHS=1_";
Restart Docker for Windows;
Go to Docker for Windows settings > Shared Drives > Reset credentials > select drive > Apply;
Reopen Command Line;
Kill the _Containers_;
Rerun the _Containers_.

  1. On Command Line: "_set COMPOSE_CONVERT_WINDOWS_PATHS=1_";
  2. Restart Docker for Windows;
  3. Go to Docker for Windows settings > Shared Drives > Reset credentials > select drive > Apply;
  4. Reopen Command Line;
  5. Kill the _Containers_;
  6. Rerun the _Containers_.

You're the man, it solved the problem, thank you

This settings in the docker-compose file work well:

    volumes:
      - type: bind
        source: ./source_local_directory
        target: c:\target_directory
        bind:
          propagation: cached

@gersondinis there is no option in settings for Shared Drives when Docker CE is running in Windows mode...unless I'm missing something using edge release:

image

you are not seeing it because you are using window container, you need to switch to linux container

Will $PWD also work with COMPOSE_CONVERT_WINDOWS_PATHS=1 ? e.g

drupal:
    driver: local
    driver_opts:
      type: none
      device: $PWD/code/drupal
      o: bind

I was having this issue (at least I think it's the same issue), but since I wanted to keep Hyper-V off in order to use accelerated emulation for Intel + Android, I couldn't use the Docker for Windows GUI app and look for those _Shared Drives_ settings that @shin- mentioned, because I was using docker-machine.exe + VirtualBox. So what I had to do in this particular case instead was this: https://forums.docker.com/t/how-to-share-volumes-and-or-drives-using-docker-machine-on-windows-not-beta/20170/2

& "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" sharedfolder add default --name "shared" --hostpath "C:/your/shared/folder/" --automount

And then in docker-compose.yml:

volumes:
      - /shared:/some/dir/in/the/container

I think this is more like a workaround and not a full solution, but I hope somebody finds it helpful.

TL;DR: If you're using VirtualBox and not Docker for Windows, try mounting the drives in VirtualBox with VBoxManage.exe

I'm using windows subsystem for linux, running the docker-host on the windows machine exposed via non-TLS port 2375.

I tried what @stavrogin mentioned, but it did not work.
My docker-compose.yml mounts a file into the container like this:

version: '2'

services:
  nginx:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 80:80
      - 443:443

After running docker-compose up i get " Are you trying to mount a directory onto a file (or vice-versa)"

Starting ea_nginx_1 ...
Starting ea_grafana_1 ...
Starting ea_influxdb_1 ...
Starting ea_collectd_1 ... error

ERROR: for ea_collectd_1  Cannot start service collectd: b'OCI runtime create failed: container_linux.go:344: starting container process caused "process_linux.go:424: containeStarting ea_nginx_1    ... error947aaf139ee40bd985d078112919c30/merged\\\\\\" at \\\\\\"/var/lib/docker/overlay2/7a737fdd9749373317586ea8c17258c8b947aaf139ee40bd985d078112919c30/merged/etc/collectd/collectd.conf\\\\\\" caused \\\\\\"not a directory\\\\\\"\\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is
the expected type'

ERROR: for ea_nginx_1  Cannot start service nginx: b'OCI runtime create failed: container_linux.go:344: starting container process caused "process_linux.go:424: container init caused \\"rootfs_linux.go:58: mounting \\\\\\"/mnt/d/Daten/workspace/ea/nginx.conf\\\\\\" to rootfs \\\\\\"/var/lib/docker/overlay2/db2c014e375524c7b6bf97cc874915d023c25b8e8f

I tried placing an .env file within the directory

 ben@ben-desktop  /d/Daten/workspace/ea   master ●  ls -al
total 60
drwxrwxrwx 1 ben ben  4096 Feb  3 09:47 .
drwxrwxrwx 1 ben ben  4096 Feb  3 08:44 ..
-rwxrwxrwx 1 ben ben 34197 Feb  3 08:37 collectd.conf
-rwxrwxrwx 1 ben ben   765 Feb  3 09:32 docker-compose.yml
-rwxrwxrwx 1 ben ben    31 Feb  3 09:52 .env
drwxrwxrwx 1 ben ben  4096 Feb  3 10:03 .git
-rwxrwxrwx 1 ben ben  2641 Feb  3 08:37 influxdb.conf
-rwxrwxrwx 1 ben ben  1086 Feb  3 08:37 LICENSE
-rwxrwxrwx 1 ben ben   169 Feb  3 09:26 nginx.conf
-rwxrwxrwx 1 ben ben   629 Feb  3 08:37 README.md
-rwxrwxrwx 1 ben ben  8577 Feb  3 08:37 types.db
 ben@ben-desktop  /d/Daten/workspace/ea   master ● 

But still cannot start the containers from my Windows machine. Running the exact same configuration on a linode works as is. What am I missing out here?

Edit: Moving the repository within the subsystem /home/ben/ea did also not resolve it

Edit: I fixed it with changing the Volumes from

 nginx:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 80:80
      - 443:443

to

 nginx:
    image: nginx:latest
    volumes:
      - ${PWD}/nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 80:80
      - 443:443

using docker toolbox on windows this way i could solve my the issue
https://medium.com/@Charles_Stover/fixing-volumes-in-docker-toolbox-4ad5ace0e572

_docker-compose.yml:_

version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- //c/var/docker-compose-test:/code
redis:
image: "redis:alpine"

If you're still having issues, please make sure your shared drives are configured properly: https://blogs.msdn.microsoft.com/stevelasker/2016/06/14/configuring-docker-for-windows-volumes/

and this COMPOSE_CONVERT_WINDOWS_PATHS=1

Worked for me

This settings in the docker-compose file work well:

    volumes:
      - type: bind
        source: ./source_local_directory
        target: c:\target_directory
        bind:
          propagation: cached

Thank you, it is working.

BTW, please keep in mind you should use at least version 3.3 of docker-compose YAML notation.

This settings in the docker-compose file work well:

    volumes:
      - type: bind
        source: ./source_local_directory
        target: c:\target_directory
        bind:
          propagation: cached

This fixed it for me too...

What about ownership between windows docker host and container users, assuming docker-compose volume mounts correctly, the drivers do not seem to exist to translate ownership. Would we need to chown after each docker-compose up if we wanted to edit the mounted data on windows, for example?

I just discovered the "Reset Credentials..." button in the Shared Drive settings, which solved the issue for me. In my case the volume suddenly stopped working after disabling+enabling Hyper-V. Resetting the credentials for the shared drives fixed it again

Can someone elaborate this please? I don't understand where can I find these settings.

I just discovered the "Reset Credentials..." button in the Shared Drive settings, which solved the issue for me. In my case the volume suddenly stopped working after disabling+enabling Hyper-V. Resetting the credentials for the shared drives fixed it again

Can someone elaborate this please? I don't understand where can I find these settings.

On the latest Docker for Windows GUI these settings are removed, I guess because this version is not supposed to loose credentials

Was this page helpful?
0 / 5 - 0 ratings

Related issues

foxx picture foxx  ·  3Comments

29e7e280-0d1c-4bba-98fe-f7cd3ca7500a picture 29e7e280-0d1c-4bba-98fe-f7cd3ca7500a  ·  3Comments

saulshanabrook picture saulshanabrook  ·  3Comments

Hendrik-H picture Hendrik-H  ·  3Comments

CrimsonGlory picture CrimsonGlory  ·  3Comments