Jean Robert
Jean Robert

Reputation: 759

Docker-compose volumes doesn't copy any files

I'm in Fedora 23 and i'm using docker-compose to build two containers: app and db. I want to use that docker as my dev env, but have to execute docker-compose build and up every time i change the code isn't nice. So i was searching and tried the "volumes" option but my code doesn't get copied to docker.

When i run docker-build, a "RUN ls" command doesn't list the "app" folder or any files of it.

Obs.: in the root folder I have: docker-compose.yml, .gitignore, app (folder), db (folder)

Obs¹.: If I remove the volumes and working_dir options and instead I use a "COPY . /app" command inside the app/Dockerfile it works and my app is running, but I want it to sync my code.

Anyone know how to make it work?

My docker-compose file is:

version: '2'  
services:  
  app:
    build: ./app
    ports:
     - "3000:3000"
    depends_on:
     - db
    environment:
     - DATABASE_HOST=db
     - DATABASE_USER=myuser
     - DATABASE_PASSWORD=mypass
     - DATABASE_NAME=dbusuarios
     - PORT=3000
    volumes:
     - ./app:/app
    working_dir: /app
  db:
    build: ./db
    environment:
     - MYSQL_ROOT_PASSWORD=123
     - MYSQL_DATABASE=dbusuarios
     - MYSQL_USER=myuser
     - MYSQL_PASSWORD=mypass

Here you can see my app container Dockerfile: https://gist.github.com/jradesenv/d3b5c09f2fcf3a41f392d665e4ca0fb9

Heres the output of the RUN ls command inside Dockerfile:

bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

Upvotes: 5

Views: 13363

Answers (4)

Hardik Raval
Hardik Raval

Reputation: 3641

I had this same issue in Windows!

volumes:
      - ./src/:/var/www/html

In windows ./src/ this syntax might not work in regular command prompt, so use powershell instead and then run docker-compose up -d.

it should work if it's a mounting issue.

Upvotes: 0

Akash Sharma
Akash Sharma

Reputation: 757

You can extend or override docker compose configuration. Please follow for more info: https://docs.docker.com/compose/extends/

Upvotes: 0

mortuie
mortuie

Reputation: 335

Two things, have you tried version: '3' version two seems to be outdated. Also try putting the working_dir into the Dockerfile rather than the docker-compose. Maybe it's not supported in version 2?

This is a recent docker-compose I have used with volumes and workdirs in the respective Dockerfiles:

version: '3'
services:
  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile.dev
    ports:
      - 3001:3001
    volumes:
      - ./frontend:/app
    networks:
      - frontend
  backend:
    build: .
    ports:
      - 3000:3000
    volumes:
      - .:/app
    networks:
      - frontend
      - backend
    depends_on:
      - "mongo"
  mongo:
    image: mongo
    volumes:
      - ./data/db:/data/db
    ports:
      - 27017:27017
    networks:
      - backend
networks:
  frontend:
  backend:

Upvotes: 1

BMitch
BMitch

Reputation: 263549

A volume is mounted in a container. The Dockerfile is used to create the image, and that image is used to make the container. What that means is a RUN ls inside your Dockerfile will show the filesystem before the volume is mounted. If you need these files to be part of the image for your build to complete, they shouldn't be in the volume and you'll need to copy them with the COPY command as you've described. If you simply want evidence that these files are mounted inside your running container, run a

docker exec $container_name ls -l /

Where $container_name will be something like ${folder_name}_app_1, which you'll see in a docker ps.

Upvotes: 3

Related Questions