Reputation: 1736
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?
Upvotes: 125
Views: 203667
Reputation: 432
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!
Upvotes: 0
Reputation: 61
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"]```
Upvotes: 0
Reputation: 22833
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
Upvotes: 0
Reputation: 723
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
Upvotes: 0
Reputation: 251
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.
Upvotes: 1
Reputation: 720
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 ./
Upvotes: 1
Reputation: 3150
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.
Upvotes: 9
Reputation: 510
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.
Upvotes: 0
Reputation: 6839
I had to use the following command to start the build:
docker build .
Upvotes: 11
Reputation: 91
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.
Upvotes: 3
Reputation: 4691
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.
Upvotes: 0
Reputation: 37349
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
Upvotes: 2
Reputation: 1448
Another potential cause is that docker will not follow symbolic links by default (i.e don't use ln -s
).
Upvotes: 1
Reputation: 1651
.dockerignore
file in build path, the files or dir you want to copy may be in the ignore file list!Upvotes: 18
Reputation: 3134
I was also facing the same, I moved my docker file to root of the project. then it worked
Upvotes: 6
Reputation: 1005
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
Upvotes: 4
Reputation: 551
Check if there's a .dockerignore
file, if so, add:
!mydir/test.json
!mydir/test.py
Upvotes: 55
Reputation: 11
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!
Upvotes: -1
Reputation: 1
<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>
Upvotes: -8
Reputation: 201
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
Upvotes: 1
Reputation: 1778
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…
Upvotes: 0
Reputation: 4311
You should put those files into the same directory with Dockerfile.
Upvotes: 63
Reputation: 113
Removing ./
from source path should resolve your issue:
COPY test.json /home/test.json
COPY test.py /home/test.py
Upvotes: 9