125

I want to create a docker image. This is my work directory: Dockerfile.in test.json test.py

And this is my Dockerfile:

COPY ./test.json /home/test.json COPY ./test.py /home/test.py RUN python test.py 

When i launch this command: docker build -f Dockerfile.in -t 637268723/test:1.0 .

It gives me this error:

`Step 1/5 : COPY ./test.json /home/test.json ---> Using cache ---> 6774cd225d60 Step 2/5 : COPY ./test.py /home/test.py COPY failed: stat /var/lib/docker/tmp/docker-builder428014112/test.py: no such file or directory` 

Can anyone help me?

10
  • 15
    Is test.py or *.py in your dockerignore? Commented Oct 24, 2017 at 12:16
  • 4
    Is test.py available in current directory where Docker filed exitsts. Commented Oct 24, 2017 at 12:36
  • 6
    Did you ever solve this? Having the same problem. Commented Nov 22, 2017 at 18:39
  • 4
    Docker still presents buggy behaviors on it's engine, imho. I used the same COPY statement on my Dockerfile, and had the same issues. Tried COPY /host_file /container_folder (without dot), and it worked. After this, tried the former COPY that you have here, and it worked normally (wtf?)! One thing that I made different, was to remove all images (cache) that Docker generates on the build process. My guess, is that trash might be still stored on these intermediary images (I'm using Docker 18.09.5). Take a look on SO or GitHub, SO MANY issues about 'copying host -> container. Bad omen. Commented Apr 28, 2019 at 19:26
  • 1
    Wow man, ivanleoncz thank you I resolved this problem. I had this clause: ADD mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar and I put a simple slash before the mcint_swagger_hub-1.0.0.jar , so now i got this: ADD /mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar and I have no problem. Thanks bro!! God Bless you Commented Feb 24, 2020 at 18:12

23 Answers 23

63

You should put those files into the same directory with Dockerfile.

Sign up to request clarification or add additional context in comments.

3 Comments

Because I was using 'from python:2.7-onbuild' it copied all the sibling and child files from Dockerfile location anyway. So, I finally removed the COPY lines from Dockerfile and the files being as sibling files were copied too.
If this doesn't work, check your .dockerignore file!
My script part of my gitlab-ci.yml file was: - cd cmd/ZpmHttpServer/ - apk add git - go get - go build -o ../../ZPMOddajaNalog_API. The following part was missing: ../../ which was the reason that the Dockerfile was not in the same directory.
55

Check if there's a .dockerignore file, if so, add:

!mydir/test.json !mydir/test.py 

2 Comments

This one worked for me, the whole folder was ignored, then docker failed to create the image giving a bad impression driving me mad about the file paths.
This worked for me as well. In my case the folder I was referring to was in .dockerignore, so removed from it.
18
  1. Q1: Check your .dockerignore file in build path, the files or dir you want to copy may be in the ignore file list!
  2. Q2: The COPY directive is based on the context in which you are building the image, so be aware of any problems with the directory where you are currently building the image! See: https://docs.docker.com/engine/reference/builder/#copy

1 Comment

.dockerignore is the root cause for my issue!
11

I had to use the following command to start the build:

docker build .

2 Comments

This worked for me, thank you. docker build . --no-cache
This worked for me too, and I'm not sure why it would work and docker build - < Dockerfile wouldn't...
9

Removing ./ from source path should resolve your issue:

 COPY test.json /home/test.json COPY test.py /home/test.py 

3 Comments

in may case i put them in docker ignore oh no :D
@Mugen glad that my comment save your life ;)
@Adiii you saved my life as well.
9

Make sure the context you build your image with is set correctly. You can set the context when building as an argument. Example: docker build -f ./Dockerfile .. where '..' is the context in this example.

2 Comments

THANKS!!! this helped me a lot. I was using docker build - < docker/gpu.Dockerfile but now I tried docker build -f docker/gpu.Dockerfile . and it works perfectly
Another big thanks here! I had my Dockerfile in a folder named docker and all files to be copied outside it in the root folder. I then run docker build -t my-image . The dot was there due to the Dockerfile being in this docker directory, but it couldn't see all the other files in the root folder because the context was set as the docker folder. This solved it: docker build -t my-image -f ./Dockerfile .. (executed within the docker folder).
6

I was also facing the same, I moved my docker file to root of the project. then it worked

Comments

4

In your case removing ./ should solve the issue. I had another case wherein I was using a directory from the parent directory and docker can only access files present below the directory where Dockerfile is present so if I have a directory structure /root/dir and Dockerfile /root/dir/Dockerfile

I cannot copy do the following

COPY root/src /opt/src 

2 Comments

My own problem was a little different, but Docker's "issue" with odd paths when referencing a file above the folder containing Dockerfile was the issue THANKS! [Windows 10 + Powershell].
do you have a reference for this "docker can only access files present below the directory where Dockerfile is present" ?
3

In my case, it was the comment line that was messing up the COPY command

I removed the comment after the COPY command and placed it to a dedicated line above the command. Surprisingly it resolved the issue.

Faulty Dockerfile command

COPY qt-downloader . # https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions 

Working Dockerfile command

# https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions COPY qt-downloader . 

Hope it helps someone.

Comments

2

The following structure in docker-compose.yaml will allow you to have the Dockerfile in a subfolder from the root:

version: '3' services: db: image: postgres:11 environment: - PGDATA=/var/lib/postgresql/data/pgdata volumes: - postgres-data:/var/lib/postgresql/data ports: - 127.0.0.1:5432:5432 **web: build: context: ".." dockerfile: dockerfiles/Dockerfile** command: ... ... 

Then, in your Dockerfile, which is in the same directory as docker-compose.yaml, you can do the following:

ENV APP_HOME /home RUN mkdir -p ${APP_HOME} # Copy the file to the directory in the container COPY test.json ${APP_HOME}/test.json COPY test.py ${APP_HOME}/test.py # Browse to that directory created above WORKDIR ${APP_HOME} 

You can then run docker-compose from the parent directory like:

docker-compose -f .\dockerfiles\docker-compose.yaml build --no-cache 

Comments

1

This may help someone else facing similar issue.

Instead of putting the file floating in the same directory as the Dockerfile, create a dir and place the file to copy and then try.

COPY mydir/test.json /home/test.json COPY mydir/test.json /home/test.json 

1 Comment

Is this a bug? Has someone figured out why this works? This was the only thing that helped
1

Another potential cause is that docker will not follow symbolic links by default (i.e don't use ln -s).

Comments

1

In my case, I had to put all my project files into a subdirectory

app -|inside app directory we have the following | package.js | src | assets Dockerfile 

Then I copied files in his way

COPY app ./ 

1 Comment

I had the same problem and this fixed it, docker-compose version 1.24.0, build 0aa59064, Docker version 18.09.6, build 481bc77
1

I had such error while trying to build a docker image and push to the container registry. Inside my docker file I tried to copy a jar file from target folder and try to execute it with java -jar command.

I was solving the issue by removing .jar file and target folder from .gitignore file.

Comments

0

When using the Docker compose files, publish, publishes to obj/Docker/Publish. When I copied my files there and pointed my Dockerfile to this directory (as generated), it works…

Comments

0

The way docker look for file is from the current directory i.e. if your command is

COPY target/xyz.jar app.jar

ADD target/xyz.jar app.jar

The xyz jar should be in the current/target directory - here current is the place where you have your docker file. So if you have docker in a different dir. its better bring to main project directory and have a straight path to the jar being added or copied to the image.

Comments

0

I had the same issue with a .tgz file .

It was just about the location of the file. Ensure the file is in the same directory of the Dockerfile.

Also ensure the .dockerignore file directory doesn't exclude the file regex pattern.

Comments

0

In my case the solution was to place file in a directory and copy whole directory content with one command, instead of copying a single file:

COPY --chown=1016:1016 myfiles /home/myapp/myfiles 

Comments

0

Make sure your path names are the same (case sensitive), folder name /dist/inventory

COPY /Dist/Inventory ... -- was throwing the error COPY /dist/inventory ... -- working smoothly 

Comments

0

Using nodejs/express/javascript!

In my case I had multiple CMD ["npm" "run"...] on the same Dockerfile, where you can only have 1. Hence, the first CMD ["npm" "run" "build"] was not being run while the /build folder was not created. Therefore the cmd to copy the build folder COPY --from=build /usr/src/app/build ./build failed! Change from a CMD to a RUN npm run build to fix the issue.

My Dockerfile:

WORKDIR /usr/src/app COPY package*.json ./ RUN npm install # copy everything except content from .dockerignore COPY . ./ #CMD ["npm", "run", "build"] RUN npm run build RUN ls -la | grep build FROM node:lts-alpine3.17 as production ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV} WORKDIR /usr/src/app RUN pwd COPY package*.json ./ RUN npm ci --only=production COPY --from=build /usr/src/app/build ./build CMD ["node", "build/index.js"]``` 

Comments

0

In my case docker config was

FROM openjdk:8-jdk-alpine ADD target/assignment-0.0.1-SNAPSHOT.jar assignment.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "assignment.jar"] 

But I had not built my project so my assignment-0.0.1-SNAPSHOT.jar was not yet present in the target folder (java spring app). Once I built the project by doing a maven clean and maven install, and ran the docker-compose up command again, it worked!

Comments

-1

Here is the reason why it happens, i.e. your local directory in the host OS where you are running the docker should have the file, otherwise you get this error

One solution is to : use RUN cp <src> <dst> instead of COPY <src> <dst>

then run the command it works!

1 Comment

Hi, Nishant! It would be worthy to express your solution with more details. Copy files from host to container, is still something tricky on Docker. Please, give examples in order to clarify your answer. Regards :)
-8
 <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <configuration> <images> <image> <name>imagenam</name> <alias>dockerfile</alias> <build> <!-- filter>@</filter--> <dockerFileDir>dockerfile loaction</dockerFileDir> <tags> <tag>latest</tag> <tag>0.0.1</tag> </tags> </build> <run> <ports> <port>8080:8080</port> </ports> </run> </image> </images> </configuration> </plugin> 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.