Docker Toolbox: Error response from daemon: invalid mode: /root/docker Docker Toolbox: Error response from daemon: invalid mode: /root/docker docker docker

Docker Toolbox: Error response from daemon: invalid mode: /root/docker


I got the same issue while using docker toolbox. Using one more '/' before your source path as well as before your target path will resolve this problem. In your case it will look like this:

docker run -ti -h python -v /${pwd}://root/docker -p 9999:9999 ubuntu:latest /bin/bash

if this doesn't work then try using absolute path with extra '/' like this:

docker run -ti -h python -v //c/path_to_application://root/docker -p 9999:9999 ubuntu:latest /bin/bash


Turned out that Docker Toolbox needs a different approach as stated in this discussion

Docker Forums: Map Windows Directory to Docker Container

As they said,

On Windows, you can not directly map Windows directory to your container. Because your containers are reside inside a VirtualBox VM. So your docker -v command actually maps the directory between the VM and the container.

So you have to do it in two steps:

Map a Windows directory to the VM through VirtualBox managerMap a directory in your container to the directory in your VMYou better use the Kitematic UI to help you. It is much eaiser.

  • I first defined a shared folder on VirtualBox to the machine I use.
  • Then closed that machine and docker windows, then started docker toolbox again.
  • Then run docker-machine ssh default, and just change directory to the folder you shared (with given name). Mine was "cd mydocker", then with ls you can see the files you shared with VM.
  • And in toolbox, run docker run -it -v /mydocker:/path_in_container image_name /bin/sh
  • You should see the folder and content in /path_in_container.


The "invalid mode" error comes from parsing the third field in a volume mount, where each field is separated by a colon. In this command:

docker run -ti -h python -v ${pwd}:/root/docker -p 9999:9999 ubuntu:latest /bin/bash

The ${pwd} is going to expand to something like c:\Program Files\.... That means the volume mount will get parsed as:

  • source: C (or your current drive letter, this gets processed as a named volume rather than a host path)
  • target: /Program Files/... or wherever you happen to be running this command from.
  • mount options: /root/ which is an "invalid mode" (normal options include things like ro for a read only mount)

What's needed is a leading slash before the drive letter, and you want to remove the extra colon after the drive letter. With PowerShell, you may be forced to expand the path manually without using ${pwd}. That would look like:

docker run -ti -h python -v "/c/Program Files/...:/root/docker" -p 9999:9999 ubuntu:latest /bin/bash

If you use git bash, it has its own unique feature of turning something with a forward slash into a relative path under its install directory. To disable that, you switch to a second leading slash:

docker run -ti -h python -v "/$(pwd):/root/docker" -p 9999:9999 ubuntu:latest //bin/bash

Note in both examples, I've quoted the path in case in includes spaces.