Search code examples
dockerdocker-composedocker-swarm

Docker | Mounting volumes causes error


I am trying to setup a Docker swarm which connects 3 of my servers together. The swarm is setup and going to the URL I get the same result, which is perfect and just what I need.

However, for the server in which I am working on now I am producing a global nginx on every server in order to allow load balancing.

Sitting on the server will be multiple config files which I need in order to map the domain to the correct folder, which is the part which I am stuck on/not working for me.

I have a really simple docker-compose.yml as I have shrunk it in order to debug the issue, it consists of the following...

version: '3'
  services:
    nginx:
      image: nginx:latest
    volumes:
      - /var/www/nginx/config/:/etc/nginx/conf.d/:ro
    deploy:
      mode: global

The volume is coming back with the error "invalid mount config for type "bind": bind source path does not exist" so obviously when I remove the volume line it works perfectly, however I 100% need this line.

I can, inside of the server navigate perfectly to /var/www/nginx/config/ and my config files exist within. Same with the other, if I run docker exec -it <container> /bin/bash and navigate to /etc/nginx/conf.d I can get to there perfectly fine which is why I'm posting on here.

I've looked at other posts and done what other people have said have fixed it such as

  • Adding quotes to the volume
  • Remove the slash at the end of the file
  • Restart the server
  • Restart Docker

But nothing seems to be working


Solution

  • The potential issue could be that not all the nodes in your swarm cluster have the directory (/var/www/nginx/config/) created. Since in swarm the service can be placed in any of the available nodes(unless you put in a constraint) you might be seeing this error.

    Make sure that you have this directory created in all the 3 nodes.

    Additionally you can also have a look here for defining configs.