Chcę utworzyć obraz Dockera. To jest mój katalog roboczy: Dockerfile.in test.json test.py
A to jest mój plik Dockerfile:
COPY ./test.json /home/test.json
COPY ./test.py /home/test.py
RUN python test.py
Kiedy uruchamiam to polecenie:
docker build -f Dockerfile.in -t 637268723/test:1.0 .
Daje mi ten błąd:
`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`
Czy ktoś może mi pomóc?
python
docker
dockerfile
docker-image
EdoBen
źródło
źródło
COPY
oświadczenia w moim pliku Dockerfile i miałem te same problemy. PróbowałemCOPY /host_file /container_folder
(bez kropki) i zadziałało. Potem wypróbowałem ten pierwszyCOPY
, który masz tutaj i działał normalnie (wtf?)! Jedyną rzeczą, którą zrobiłem, było usunięcie wszystkich obrazów (pamięci podręcznej), które Docker generuje w procesie kompilacji. Domyślam się, że na tych pośrednich obrazach nadal mogą znajdować się śmieci (używam Dockera 18.09.5). Spójrz na SO lub GitHub, TAK WIELE problemów dotyczących kopiowania hosta -> kontenera. Zły znak.Odpowiedzi:
Powinieneś umieścić te pliki w tym samym katalogu z Dockerfile.
źródło
.dockerignore
plik!Sprawdź, czy istnieje
.dockerignore
plik, jeśli tak, dodaj:źródło
.dockerignore
plik w ścieżce kompilacji, pliki lub katalog, który chcesz skopiować, mogą znajdować się na liście plików ignorowanych!źródło
Usunięcie
./
ze ścieżki źródłowej powinno rozwiązać problem:źródło
Miałem to samo, przeniosłem plik Dockera do katalogu głównego projektu. wtedy zadziałało
źródło
Musiałem użyć następującego polecenia, aby rozpocząć kompilację:
docker build .
źródło
W twoim przypadku usunięcie ./ powinno rozwiązać problem. Miałem inny przypadek, w którym korzystałem z katalogu z katalogu nadrzędnego, a docker może uzyskać dostęp tylko do plików znajdujących się poniżej katalogu, w którym znajduje się plik Dockerfile, więc jeśli mam strukturę katalogów / root / dir i Dockerfile / root / dir / Dockerfile
Nie mogę skopiować, wykonaj następujące czynności
źródło
Może to pomóc komuś innemu, który ma podobny problem.
Zamiast umieszczać plik pływający w tym samym katalogu co plik Dockerfile, utwórz katalog i umieść plik do skopiowania, a następnie spróbuj.
źródło
Inną potencjalną przyczyną jest to, że docker domyślnie nie podąża za dowiązaniami symbolicznymi (tj. Nie używa
ln -s
).źródło
W moim przypadku to wiersz komentarza zakłócał polecenie COPY
Usunąłem komentarz po poleceniu COPY i umieściłem go w dedykowanym wierszu nad poleceniem. Niespodziewanie rozwiązało to problem.
Wadliwe polecenie Dockerfile
COPY qt-downloader . # https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions
Działające polecenie Dockerfile
# https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions COPY qt-downloader .
Mam nadzieję, że to komuś pomoże.
źródło
Upewnij się, że kontekst, w którym tworzysz obraz, jest ustawiony poprawnie. Możesz ustawić kontekst podczas budowania jako argument. Przykład:
docker build -f ./Dockerfile ..
gdzie „..” jest kontekstem w tym przykładzie.źródło
Korzystając z plików redagowania platformy Docker, publikuj, publikuje w obj / Docker / Publish. Kiedy skopiowałem tam moje pliki i wskazałem mój plik Dockerfile do tego katalogu (w postaci wygenerowanej), działa…
źródło
Sposób, w jaki docker szuka pliku, pochodzi z bieżącego katalogu, tj. Jeśli tak jest
Jar xyz powinien znajdować się w katalogu bieżącym / docelowym - tutaj aktualne jest miejsce, w którym masz plik dockera. Więc jeśli masz dockera w innym reż. lepiej przenieść go do głównego katalogu projektu i mieć prostą ścieżkę do pliku jar, który jest dodawany lub kopiowany do obrazu.
źródło
Miałem ten sam problem z plikiem .tgz.
Chodziło tylko o lokalizację pliku. Upewnij się, że plik znajduje się w tym samym katalogu co plik Dockerfile.
Upewnij się również, że katalog pliku .dockerignore nie wyklucza wzorca pliku regularnego.
źródło
W moim przypadku musiałem umieścić wszystkie pliki projektu w podkatalogu
Potem skopiowałem pliki na jego sposób
źródło
Miałem taki błąd podczas próby zbudowania obrazu Dockera i wypchnięcia do rejestru kontenerów. W moim pliku Dockera próbowałem skopiować plik jar z folderu docelowego i spróbować go uruchomić za pomocą polecenia java -jar.
Rozwiązałem problem, usuwając plik .jar i folder docelowy z pliku .gitignore.
źródło
Oto powód, dla którego tak się dzieje, tj. Twój lokalny katalog w systemie operacyjnym hosta, na którym uruchamiasz docker, powinien mieć plik, w przeciwnym razie otrzymasz ten błąd
Jednym z rozwiązań jest: użyj
RUN cp <src> <dst>
zamiastCOPY <src> <dst>
następnie uruchom polecenie, które działa!
źródło
Poniższa struktura w docker-compose.yaml pozwoli ci mieć plik Dockerfile w podfolderze z katalogu głównego:
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: ... ...
Następnie w pliku Dockerfile, który znajduje się w tym samym katalogu co plik docker-compose.yaml, możesz wykonać następujące czynności:
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}
Następnie możesz uruchomić docker-compose z katalogu nadrzędnego, na przykład:
źródło
<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>
źródło