2016-03-23 14 views
27

Ich möchte eine einfache JS Boilerplate zu Docker Cloud bereitstellen. Ich benutze eine Dockerfile, die ich bereits für eine andere Boilerplate und Bild verwendet habe. Die Dockerfile ist ziemlich einfach. Es basiert nur auf dem offiziellen nginx, fügt zwei config-Dateien hinzu und dann den Ausgabeordner meiner gulp boilerplate zum nginx root. Also habe ich es aus dem einen Verzeichnis in das neue Verzeichnis kopiert, da ich dieses hier ausprobieren möchte.Docker: "lstat keine solche Datei oder Verzeichnis" Fehler beim Erstellen des Bildes. Datei ist dort

Der Fehler Ich erhalte ist diese (letzte Zeile)

Sending build context to Docker daemon 277.5 kB 
Step 1 : FROM nginx 
---> af4b3d7d5401 
Step 2 : MAINTAINER Ole Bjarnstroem 
---> Using cache 
---> f57bc23d9444 
Step 3 : ENV LANG en_US.UTF-8 
---> Using cache 
---> f6f4a76092dd 
Step 4 : COPY ./nginx/nginx.conf /etc/nginx/nginx.conf 
---> Using cache 
---> c4f83a39ba73 
Step 5 : COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf 
---> Using cache 
---> 6fe5a6b61d9f 
Step 6 : ADD ./dist /usr/share/nginx/html 
lstat dist: no such file or directory 

Aber der dist-Ordner ist da.

. 
├── Dockerfile 
├── JSCS.intellij.formatter.xml 
├── README.md 
├── app 
├── dist 
├── gulpfile.babel.js 
├── jspm.conf.js 
├── jspm_packages 
├── karma.conf.js 
├── nginx 
├── node_modules 
├── package.json 
├── tsconfig.json 
├── tslint.json 
├── typings 
└── typings.json 

Es könnte bemerkenswert sein, dass der Ordner ./public Sogenannte kopiert werden sollte, vorstellen könnte ich, dass dies eine Art seltsamen Docker Cache Problem.

Mein Dockerfile:

FROM nginx 

ENV LANG en_US.UTF-8 

# Copy configuration files 
COPY ./nginx/nginx.conf /etc/nginx/nginx.conf 
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf 

# Add Gulp output folder to server root 
ADD ./dist /usr/share/nginx/html 

# Port configuration 
EXPOSE 8080 

Was ich bisher versucht:

  • baumelnden löschen und nicht verwendete Bilder
  • Löschen des Bildes, das zuvor von der gleichen Docker-Datei erstellt wurde
  • Verwendung ein anderes Tag

Mein Build-Befehl:

docker build -t my_repo/my_app . 

Vielen Dank für Ihre Hilfe!

Bearbeiten: Jeder andere Ordner funktioniert. Es ist auch kein Problem mit Dateiberechtigungen. Es scheint, dass Docker nur doesn't like the dist folder. Was ist scheiße.

Antwort

68

Nun, dumm ich. Es gab eine .dockerignore Datei mit dist im Projektordner ... Case

geschlossen
+2

Ich habe gerade das getan. Fragte sich, warum meine .rpm nicht hinzugefügt wurde. Es wurde alles klar (nachdem ich das gelesen hatte), als ich merkte, dass ich * .rpm in .dockerignore hatte. Vielen Dank. – Chris

+2

diese Antwort hat mir schon einmal geholfen; Ich musste das heute noch googeln, und es gab eigentlich keine Datensätze in '.dockerignore' für den Ordner, den ich hinzufügen wollte ... dann habe ich einen Tippfehler im Namen eines Ordners gefunden: \ –

+3

Doh !!! Ich habe stundenlang mit diesem Thema gekämpft, danke, dass ich sonst etwas geschrieben hätte, dass ich verloren gegangen wäre. Meine Dummheit ging noch weiter Ich hatte * in .dockerignore :( –

10

ich hatte das gleiche Problem, aber es war nicht die .dockerignore, habe ich vergessen, das Verzeichnis angeben laufen Docker in. In meinem Fall des Verzeichnis war . My vor dem vollständige Befehl

docker build - < Dockerfile 

und war nach

docker build . < Docker file 
1

Ein verwandter Fehler in der Google App Engine SDK-Version 138 ergab die gleiche Fehlermeldung war. Dieser Fehler wurde in Version 139 des SDK behoben. Sie können mit dem folgenden Befehl auf die neueste Version aktualisieren:

gcloud components upgrade 
2

ich auch das gleiche Problem hatte, war das Problem nicht meine .dockerignore aber mein .gitignore, da ich nicht dist von meinem gitgnore entfernen konnte ich habe hinzugefügt cp Befehl in meinem Dockerfile:

.... 
WORKDIR/
RUN cp -r public/dist/* www/ 
EXPOSE 80 
2

hatte ich dieses Problem und das Problem stellte sich heraus, dass ich einen Kommentar inlined hatte, zB

COPY file1.txt dest/ # comment

stellte sich heraus, Sie nicht das tun kann.

4

habe ich das Verzeichnis nach dem Build-Befehl -f verwendet, um die dockerfile angeben

zB:

sudo docker build . -t test:i386 -f mydockerfile

Der Punkt nach dem Bauprozess ist das Verzeichnis aus, in diesem Fall vorliegend dir zu bauen .

0

Für folgende Docker Buildfehler,

COPY failed: stat /<**path**> :no such file or directory 

ich es bekommen habe um von Docker Dienst neu zu starten.

sudo service docker restart 
0

(Credits: https://serverfault.com/a/666154/152918)

Die Dateien, die Sie kopieren möchten innerhalb des Docker Bildverzeichnis sein muss. Sie können Dateien nirgends in Ihrem Dateisystem referenzieren.

Verwandte Themen