516 Stimmen

Docker: Hinzufügen einer Datei aus einem übergeordneten Verzeichnis

In meinem Dockerfile habe ich:

ADD ../../myapp.war /opt/tomcat7/webapps/

Diese Datei existiert, da ls ../../myapp.war mir die richtige Datei zurückgibt, aber wenn ich sudo docker build -t myapp . ausführe, bekomme ich:

Schritt 1 : ADD ../../myapp.war /opt/tomcat7/webapps/
2014/07/02 19:18:09 ../../myapp.war: Datei oder Verzeichnis nicht gefunden

Weiß jemand, warum und wie man es richtig macht?

599voto

Boedy Punkte 6027
  1. cd zum übergeordneten Verzeichnis
  2. Erstellen Sie das Bild aus dem übergeordneten Verzeichnis, indem Sie den Pfad zu Ihrer Dockerdatei angeben

    docker build -t -f

In diesem Fall wird der Kontext des Docker auf das übergeordnete Verzeichnis umgeschaltet und für ADD und COPY zugänglich gemacht

271voto

Nikita Kuznetsov Punkte 2207

Mit Docker-Compose könnten Sie den Kontextordner festlegen:

# docker-compose.yml

version: '3.3'    
services:
  yourservice:
    build:
      context: ./
      dockerfile: ./docker/yourservice/Dockerfile

185voto

mbarthelemy Punkte 11813

Leider (aus praktischen und Sicherheitsgründen, denke ich), muss sich der lokale Inhalt, den Sie hinzufügen/kopieren möchten, auf der gleichen Ebene im Verzeichnisbaum wie die Dockerfile befinden.

Aus der Dokumentation:

Der -Pfad muss sich im Kontext des Builds befinden; Sie können nicht ../etwas/etwas hinzufügen, da der erste Schritt eines Docker-Builds das Senden des Kontextverzeichnisses (und Unterverzeichnisse) an den Docker-Daemon ist.

EDIT: Es gibt jetzt eine Option (-f), um den Pfad Ihrer Dockerdatei festzulegen; es kann verwendet werden, um zu erreichen, was Sie möchten, siehe Antwort von @Boedy.

42voto

Binita Bharati Punkte 3866

Hinzufügen einiger Code-Snippets zur Unterstützung der akzeptierten Antwort.

Verzeichnisstruktur :

setup/
 |__docker/DockerFile
 |__target/scripts/
src/
 |__

Eintrag in der Docker-Datei:

RUN mkdir -p /home/vagrant/dockerws/chatServerInstaller/scripts/
RUN mkdir -p /home/vagrant/dockerws/chatServerInstaller/src/
WORKDIR /home/vagrant/dockerws/chatServerInstaller

# Kopieren aller erforderlichen Dateien vom Dateisystem des Hosts in das Dateisystem des Containers.
COPY setup/target/scripts/install_x.sh scripts/
COPY setup/target/scripts/install_y.sh scripts/
COPY src/ src/

Verwendeter Befehl zum Erstellen des Docker-Images

docker build -t test:latest -f setup/docker/Dockerfile .

17voto

guneysus Punkte 5747

Da -f ein anderes Problem verursacht hat, habe ich eine andere Lösung entwickelt.

  • Erstellen Sie ein Basisimage im übergeordneten Ordner
  • Fügen Sie die erforderlichen Dateien hinzu.
  • Verwenden Sie dieses Bild als Basisimage für das Projekt, das sich in einem untergeordneten Ordner befindet.

Die -f Flagge hat mein Problem nicht gelöst, weil mein onbuild Bild nach einer Datei in einem Ordner sucht und ich es so aufrufen musste:

-f foo/bar/Dockerfile foo/bar

anstatt

-f foo/bar/Dockerfile .

Beachten Sie auch, dass dies nur für einige Fälle eine Lösung ist, da die -f Flagge

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X