Search code examples
dockerdocker-composedockerfiledocker-machine

Troubleshoot directory path error in COPY command in docker file


I am using COPY command in my docker file on top of ubuntu 16.04. I am getting error as no such file or directory eventhough the directory is present. In the below docker file I want to copy the directory "auth" present inside workspace directory to the docker image (at path /home/ubuntu) and then build the image.

FROM ubuntu:16.04
RUN apt-get update
COPY /home/ubuntu/authentication/workspace   /home/ubuntu
WORKDIR /home/ubuntu/auth

Solution

  • a Dockerfile COPY command can only refer to files under the context - the current location of the Dockerfile, aka . so you have a few options now:

    1. if it is possible to copy the /home/ubuntu/authentication/workspace/ directory content to somewhere inside your project before the build (so now it will be included in your Dockerfile context and you can access it via COPY ./path/to/content /home/ubuntu) it can be great. but sometimes you dont want it.

    2. instead of copying the directory, bind it to your container via a volume:

    when you run the container, add a -v option:

    docker run [....] -v /home/ubuntu/authentication/workspace:/home/ubuntu [...]
    

    mind that a volume is designed so any change you made inside the container dir(/home/ubuntu) will affect the bound directory on your host side (/home/ubuntu/authentication/workspace) and vice versa.

    1. i found a something over here: this guy is forcing the Dockerfile to accept his context- he is sitting inside the /home/ubuntu/authentication/workspace/ directory, and running there

      docker build . -f /path/to/Dockerfile

    so now inside his Dockerfile he can refer to /home/ubuntu/authentication/workspace as his context (.)