Search code examples
docker-composelifecyclevolumes

docker-compose volumes: When are they mounted in the container?


I had assumed that docker-compose volumes are mounted before the container's service is started. Is this the case?

I ask, since I've got a docker-compose.yml that, amongst other things, fires up a parse-server container, and mounts a host directory in the container, which contains some code the service should run (Cloud Code).

I can see the directory is mounted correctly after docker-compose up by shelling into the container; the expected files are in the expected place. But the parse-server instance doesn't trigger the code in the mounted directory (I checked it by adding some garbage; no errors).

Is it possible the volume is being mounted after the parse-server service starts?

This is my docker-compose.yml:

version: "3"

volumes:
  myappdbdata:
  myappconfigdata:

services:
  # MongoDB
  myappdb:
    image: mongo:3.0.8
    volumes:
      - myappdbdata:/data/db
      - myappconfigdata:/data/configdb

  # Parse Server
  myapp-parse-server:
    image: parseplatform/parse-server:2.7.2
    environment:
      - PARSE_SERVER_MASTER_KEY=someString
      - PARSE_SERVER_APPLICATION_ID=myapp
      - VERBOSE=1
      - PARSE_SERVER_DATABASE_URI=mongodb://myappdb:27017/dev
      - PARSE_SERVER_URL=http://myapp-parse-server:1337/parse
      - PARSE_SERVER_CLOUD_CODE_MAIN = /parse-server/cloud/
    depends_on:
      - myappdb
    ports:
      - 5000:1337
    volumes:
      - ./cloud:/parse-server/cloud

Solution

  • Sadly enough, the biggest issue here was whitespace

    PARSE_SERVER_CLOUD_CODE_MAIN = /parse-server/cloud/
    

    should have been

    PARSE_SERVER_CLOUD=/parse-server/cloud/
    

    Used 1.5 days chasing this; fml.