My Scenario
I am trying to build docker swarm with docker-compose.yml
file
version: '3'
services:
myapp-nginx:
image: nginx:1.10
volumes:
- ./nginx/certs:/etc/nginx/certs
ports:
- 80:80
- 443:443
using build command as below
$ docker stack deploy --compose-file docker-compose.yml myapp
Creating network myapp_default
Creating service myapp_myapp-nginx
My system have Docker Version 17.03.1-ce-mac5 (16048)
Problem
Volumes mounts are not working, If I comment out volumes: - ./nginx/certs:/etc/nginx/certs
then everything works fine.
Otherwise nginx doesn't work at all, I see
CAGTAM1059934:docker iskumar$ docker stack ps myapp
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
efjia8b7y6jd myapp_myapp-nginx.1 nginx:1.10 manager1 Ready Rejected 5 seconds ago "invalid mount config for type…"
c9c6ogh11osi \_ myapp_myapp-nginx.1 nginx:1.10 worker2 Shutdown Rejected 10 seconds ago "invalid mount config for type…"
iveikxpnbq6x \_ myapp_myapp-nginx.1 nginx:1.10 worker1 Shutdown Rejected 15 seconds ago "invalid mount config for type…"
Is there any special way to mount volumes in docker-compose v3?
You must use absolute paths when mounting volumes, also with docker run.
I was running
docker stack deploy
from my macbook instead on boot2docker VMs. Which is why system couldn't find those network mount source, even though I had manager1 activated usingeval $(docker-machine env manager1)
First I used --no-trunc argument to view full error message.
After that copies the files from host system (My MacBook) to VM and launching stack worked fine.
Credit to https://github.com/docker/docker/issues/31202#issuecomment-281312704