Verstehen Sie, dass Sie die Volumes nicht mounten möchten, sondern dass diese Dateien Teil des Bildes sein sollen, damit sie geteilt werden können. Nehmen wir das zumindest an.
Gemäß dem Docker documentation
COPY gehorcht die folgenden Regeln:
- Der Weg in dem Kontext des Build sein muss; Sie können COPY ../etwas/etwas nicht kopieren, da der erste Schritt eines Docker-Builds darin besteht, das Kontextverzeichnis (und die Unterverzeichnisse) an den Docker-Daemon zu senden.
- Wenn es sich um ein Verzeichnis handelt, wird der gesamte Inhalt des Verzeichnisses einschließlich Dateisystem-Metadaten kopiert.
Sie könnten das Problem jetzt haben. In Ihrer Dockerfile
, d. H. COPY
Anweisung ist das Problem, da es sich auf den absoluten Pfad bezieht, der der obigen ersten Regel nicht folgt. Daher sollte htdocs
im lokalen Verzeichnis verfügbar sein, von dem aus Sie den Befehl docker build
ausführen.
Folgende Änderungen müssen vor dem Bau das Bild gemacht:
- Hoffnung, die Sie vielleicht schon ein Verzeichnis erstellt haben (die Sie Bild bauen) und dieses Verzeichnis enthält
Dockerfile
, httpd-custom.conf
Dateien.
- Gehen Sie nun in das obige Verzeichnis und kopieren Sie
/opt/mw/apache-2.2.31-instance1/htdocs
in das aktuelle Verzeichnis. So kann das Verzeichnis htdocs
jetzt Teil des Kontexts sein (wie in den Dokumenten erwähnt), während das Bild erstellt wird.
- ändern Sie die Inhalte von
Dockerfile
den folgenden (vor allem COPY-Befehl):
FROM httpd:2.2.31
RUN mkdir -p /opt/mw/apache-test/logs
ADD ./httpd-custom.conf /usr/local/apache2/conf/httpd.conf
COPY htdocs /usr/local/apache2/htdocs
Jetzt sollten Sie in der Lage sein, erfolgreich zu bauen.
Für nur Demo, verwendet, um ein geringes Gewicht busybox
und ein Verzeichnis im selben Kontext erstellen (Ihr Fall zu simulieren) und es tut wie Sie unten sehen:
$ more Dockerfile
FROM busybox
COPY data_folder /opt/data_folder
CMD ["ls", "/opt/data_folder"]
$ ls
data_folder Dockerfile
$ ls data_folder/
test.txt
Build-Bild:
$ sudo docker build -t dirtest .
Sending build context to Docker daemon 3.584 kB
Step 1 : FROM busybox
---> e02e811dd08f
Step 2 : COPY data_folder /opt/data_folder
---> b6b1a9555825
Removing intermediate container b682e0467803
Step 3 : CMD ls /opt/data_folder
---> Running in 3b05f08ceafc
---> b73190fc1fd9
Removing intermediate container 3b05f08ceafc
Successfully built b73190fc1fd9
Wird über Bild in einem Container ausgeführt, der zeigt, dass das Verzeichnis 'data_folder' kopiert wird und seinen Inhalt anzeigt. In Ihrem Fall ist es htdocs
$ sudo docker run -it --rm --name testdirtest dirtest
test.txt
Ist das Verzeichnis /opt/mw/apache-2.2.31-instance1/htdocs/ auf dem Host existieren? – harrybvp
Und noch wichtiger, existiert das Verzeichnis in dem Pfad, den Sie übergeben, als Kontext für die Erstellung Ihres Bildes? Versuchen Sie auch, ADD und COPY nicht zu mischen, Docker empfiehlt die Verwendung von COPY. Und entfernen Sie den abschließenden Schrägstrich im Quellordner – R0MANARMY
Für die erste Frage, ja das Verzeichnis vorhanden. Es ist die, die ich zum Testen benutzt habe. Für die zweite Frage. Ich denke, es existiert, ich benutze das Apache-Image. https://hub.docker.com/_/httpd/ – radicaled