Relative Path with Docker-Compose Shared Volumes
Asked Answered
T

1

15

It seems this question has already been asked by another poster, but there was no answer. I have more information on the matter, so I'm re-asking the same question - but with much additional material.

I'm running Docker on Windows 10. I have Docker configured for using Linux containers (not Windows containers). I have my C drive configured as a shared drive.

The Problem

I have the following docker-compose file called wp.yml:

version: '3.2'

services:
   db:
     image: mysql:5.7
     volumes:
       - type: volume
         source: wp_dbA
         target: /var/lib/mysql       
     restart: always

volumes:
    wp_dbA:
      driver_opts:
        type: none
        device: ./wp-db
        o: bind

I execute as follows:

c:\repos\wpsand\wpA> docker-compose -f wp.yml up -d

I receive the following error:

ERROR: for wpa_db_1 Cannot create container for service db: error while mounting volume with options: type='none' device='./wp-db' o='bind': no such file or directory

ERROR: for db Cannot create container for service db: error while mounting volume with options: type='none' device='./wp-db' o='bind': no such file or directory ERROR: Encountered errors while bringing up the project.

Despite the message,the folder wp-db does already exist, located here:

c:/repos/wpsand/wpA/wp-db

Clues...

Despite the above error, checking docker volume ls reveals that volume wpa_wp_dbA was freshly created.

Clue #1

If I change the shared volume device to use an absolute path (such as /c/repos/wpsand/wpA), then run again...I get the same problem. However, the error message still says that device with relative path ./wp-db cannot be found.

Apparently the re-use of the shared volume named wp_dbA causes any newly specified path to be ignored. The original ./wp-db is what it will attempt to use.

Clue #2

If I revert back to a relative path, but change the name of the shared volume to "wp_dbB", I still get the same error.

Clue #3

This combines #1 and #2 above. If I invent a new shared volume name, and use an absolute path, it works! My container is launched successfully. Unfortunately, I'm no longer using the relative path I wanted.

Clue #4

Now that my container works, I docker-compose down and change the docker-compose file again. I put the relative path back in, and "compose up". It works!

Conclusion?

It looks like relative paths simply don't work. But I've been seeing docker-compose files posted online using this same shared volume relative path notation. Perhaps it works for Docker, but not Docker on Windows?

Can anyone suggest a work-around?

Update!

I found this SO post that very nearly has a relative-path work-around. I updated my compose file to use the ${PWD} notation, and launched it from my Git Bash shell. Now I got this error:

$ docker-compose up -d
Creating wpa_db_1        ... error
Creating wpa_db_1        ...

ERROR: for wpa_db_1  Cannot create container for service db: error 
while mounting volume with options: type='none'
device='C:/repos/wpsand/wpA/wp-db' o='bind': no such file or directory

ERROR: for db  Cannot create container for service db: error while 
mounting volume with options: type='none' device='C:/repos/wpsand/wpA/wp-db'
o='bind': no such file or directory
Encountered errors while bringing up the project.

That almost worked! If only the ${PWD} had expanded into a Linux mount notation (/c/repos/wpsand/wpA/wp-db)!

Transpontine answered 27/2, 2018 at 20:46 Comment(1)
I'm having very similar issues on Docker for Windows. I tend to find that putting in a relative path rather than a shared volume name does work, but relative paths for a volume under the volumes section does not. Not sure whyHautboy
R
7

./ syntax worked for me for win 10 environment.

volumes:
  - ./mdata/:/data/db/
  - ./logs/:/var/log/mongodb/mongod.log
  - ./mongod.cfg:/etc/mongod.conf.orig
Rusticus answered 7/9, 2020 at 14:46 Comment(1)
That is strange. For me it was the relative path regardless if I opened with ./. When I changed to -v ${PWD}/local-relative:/remote/path it worked.Insipid

© 2022 - 2024 — McMap. All rights reserved.