Search code examples
dockerdocker-composedockerfiledocker-machine

docker COPY all fails when not in C drive


NOTE: I'm on windows 10, using docker-machine / virtual box

I have a project which builds and runs just fine when on my C:\ drive.

If I copy all files to my second hard drive F:\ the COPY . /path command in my Dockerfile appears to succeed, however when I inspect that directory in the container it's empty.

My docker file;

FROM php:7.3-apache-stretch

RUN docker-php-ext-install pdo_mysql \
    && a2enmod rewrite negotiation

COPY docker/php/php.ini /usr/local/etc/php/php.ini
COPY docker/apache/vhost.conf /etc/apache2/sites-available/000-default.conf
COPY . /srv/app

WORKDIR /srv/app

My docker-compose.yml file;

version: '3'
services:
  app:
    build: .
    ports:
      - 8080:80
    volumes:
      - .:/srv/app

The odd thing here is that the first two COPY commands work

COPY docker/php/php.ini /usr/local/etc/php/php.ini
COPY docker/apache/vhost.conf /etc/apache2/sites-available/000-default.conf

I can navigate to those two directories and see the two files individually with the right content. Some resources suggest the container does not have access to my second drive, but it clearly does, else these files would also not work.

FYI I'm using the following to build and then inspect the container

docker-machine up -d --build
docker-machine exec app bash
ls

UPDATE If I change the copy folder to /var/www/html the command works properly. I'm currently only putting the files in /srv/app because I've been following tutorial. I'm not aware of the advantage/disadvantage of this at this stage.


SOLUTION Thanks to @LinPy I used this comment to help me get the right setting: https://github.com/docker/machine/issues/3908#issuecomment-412385611

I opened a command prompt in C:\Program Files\Oracle\VirtualBox and ran the following command.

VBoxManage.exe sharedfolder add default --name "/f" --hostpath "f:\\" --automount

My VirtualBox settings now looks like this;

enter image description here


Solution

  • try this :

    docker-machine stop
    
    vboxmanage sharedfolder add default --name "project_name" --hostpath "<full_project_path>" --automount
    
    docker-machine start 
    

    then configure the mount

    volumes:
      - /project_name:/path/in/container/project_name
    

    when that did not help, try this:

    docker-machine create -d virtualbox --virtualbox-share-folder "\\?\f:\paht1\path2:installdir" test2
    

    you can see also this issue