Implementierung der Einbindung eines freigegebenen NFS-Verzeichnisses in einen Docker-Container

Implementierung der Einbindung eines freigegebenen NFS-Verzeichnisses in einen Docker-Container

Zuvor wurde unter https://www.jb51.net/article/205922.htm beschrieben, wie man mit Dockerfile ein Ubuntu 16.04-Image erstellt und das Messy_Test-Projekt im Container kompiliert und ausführt. Hier wird beschrieben, wie man das freigegebene Verzeichnis auf dem NFS-Server im Container mountet.

Der Inhalt der Docker-Datei ist wie folgt:

VON Ubuntu:16.04
LABEL-Betreuer="FengBingchun [email protected]" \
   version="1.0" \
   Beschreibung="Dockerfile-Test"
RUN dep_items='git g++-5 nfs-common make' \
  && apt-get update \
  && apt-get install -y $dep_items \
  && ln -s /usr/bin/g++-5 /usr/bin/g++ \
  && ln -s /usr/bin/gcc-5 /usr/bin/gcc \
  && mkdir -p /mnt/nfs \
  && rm -rf /var/lib/apt/lists/*

Erstellen Sie das Image. Nach der Ausführung des folgenden Befehls wird erfolgreich ein Image mit dem Namen fengbingchun/ubuntu:16.04 generiert:

Docker-Build -t Fengbingchun/Ubuntu:16.04.

Erstellen Sie durch Mounten des Host-Verzeichnisses einen neuen Containertest und führen Sie einen der folgenden Befehle aus. Der erste wird empfohlen:

docker run --cap-add sys_admin -it -P --name test --mount Typ=binden,Quelle=e:\GitCode\docker,Ziel=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash
docker run --privileged=true -it -P --name test --mount type=bind,source=e:\GitCode\docker,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash

Führen Sie die folgenden Befehle im Container aus, um ihn zu mounten, wobei davon ausgegangen wird, dass die IP des NFS-Servers 10.107.2.1 ist und das freigegebene Verzeichnis freigegeben ist:

/etc/init.d/rpcbind starten
mount -t nfs 10.107.2.1:/shared /mnt/nfs

Erstellen Sie einen Softlink, fügen Sie den Pfad der ausführbaren cmake-Datei zur Umgebungsvariablen hinzu und führen Sie die folgenden Befehle nacheinander aus:

ln -s /mnt/nfs/Ubuntu-16.04/ /usr/local/toolchains
echo "export PATH=/usr/local/toolchains/bin:$PATH" >> /etc/profile
Quelle /etc/Profil

Daher wurde cmake beim Erstellen des Images nicht installiert. Führen Sie nach dem Ausführen des Quellbefehls cmake --version aus, um die Versionsinformationen von cmake anzuzeigen, wie in der folgenden Abbildung dargestellt:

Wechseln Sie dann im Container in das Verzeichnis /home/fengbingchun, klonen Sie Messy_Test und führen Sie den folgenden Befehl aus:

Git-Klon https://github.com/fengbingchun/Messy_Test

Wechseln Sie dann in das Verzeichnis Messy_Test/prj/linux_cmake_CppBaseTest und führen Sie die folgenden Befehle nacheinander aus:

./build.sh
./build/CppBaseTest

Das Ausführungsergebnis ist in der folgenden Abbildung dargestellt. Sie zeigt, dass Messy_Test nach dem Mounten des von Dockerfile erstellten Images im Container mit dem freigegebenen NFS-Verzeichnis normal über cmake im freigegebenen Verzeichnis kompiliert und ausgeführt werden kann:

Sie können die vom NFS-Server im Container freigegebenen Verzeichnisse auch anzeigen, indem Sie den folgenden Befehl ausführen:

showmount -e 10.107.2.1

Speichern Sie das Image fengbingchun/ubuntu:16.04 in einem Tarball und führen Sie den folgenden Befehl aus:

docker save -o ubuntu_16.04.tar fengbingchun/ubuntu:16.04

Kopieren Sie ubuntu_16.04.tar auf das Ubuntu-System, laden Sie ein Image aus dem Tarball und führen Sie den folgenden Befehl aus:

Docker-Laden -i Ubuntu_16.04.tar

Führen Sie dann ähnliche Vorgänge unter Windows aus, kompilieren und führen Sie Messy_Test im neu erstellten Containertest aus und führen Sie die folgenden Befehle nacheinander aus:

docker run --privileged=true -it -P --name test --mount type=bind,source=/home/xxxx/Disk/GitHub/docker,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash
/etc/init.d/rpcbind starten
mount -t nfs 10.107.2.1:/shared /mnt/nfs
ln -s /mnt/nfs/Ubuntu-16.04/ /usr/local/toolchains
echo "export PATH=/usr/local/toolchains/bin:$PATH" >> /etc/profile
Quelle /etc/Profil
cd /home/fengbingchun/
Git-Klon https://github.com/fengbingchun/Messy_Test
cd Messy_Test/prj/linux_cmake_CppBaseTest/
./build.sh
./build/CppBaseTest

Das Ausführungsergebnis ist in der folgenden Abbildung dargestellt: Es zeigt, dass das unter Windows generierte Image nach dem Verpacken nach dem Laden unter Ubuntu normal verwendet werden kann:

Beachten:

(1) Verwenden Sie unter Ubuntu beim Erstellen eines Containers „--privileged=true“, da sonst beim Mounten der Fehler „mount.nfs: Zugriff vom Server beim Mounten von 10.107.2.1:/shared verweigert“ gemeldet wird.

(2) Unter Windows bleibt der Container manchmal hängen. Sie können den Container löschen und dann einen neuen erstellen.

Dies ist das Ende dieses Artikels zum Einbinden von NFS-Freigabeverzeichnissen in Docker-Containern. Weitere Informationen zum Einbinden von NFS-Freigabeverzeichnissen in Docker-Containern finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Docker: Zeigen Sie den Mount-Verzeichnisvorgang des Containers an
  • Docker - Zusammenfassung von 3 Möglichkeiten zum Ändern von Container-Mount-Verzeichnissen
  • Docker mountet lokale Verzeichnisse und Datenvolumen-Container-Operationen
  • So mounten Sie das Host-Verzeichnis im Docker-Container
  • So mounten Sie das Containerverzeichnis mit Docker auf dem Host

<<:  JavaScript, um einen Lotterieeffekt zu erzielen

>>:  HTML-Tutorial: DOCTYPE-Abkürzung

Artikel empfehlen

Beispielcode für Nginx zur Erreichung dynamischer und statischer Trennung

1. Einfache Konfiguration der dynamischen und sta...

Miniprogramm Benutzerdefinierte TabBar-Komponentenkapselung

In diesem Artikelbeispiel wird der spezifische Co...

So konfigurieren Sie Nginx's Anti-Hotlinking

Experimentelle Umgebung • Eine minimal installier...

vue verwendet Ele.me UI, um die Filterfunktion von Teambition zu imitieren

Inhaltsverzeichnis Problembeschreibung Die allgem...

So ändern Sie die Ubuntu-Quellliste (Quellliste) - detaillierte Erklärung

Einführung Die Standardquelle von Ubuntu ist kein...

CSS-Einstellung Div-Hintergrundbild-Implementierungscode

Das Hinzufügen einer Hintergrundbildsteuerung zu ...

Fähigkeiten zur Seiten-Refaktorierung – Javascript, CSS

Über JS, CSS CSS: Stylesheet oben Vermeiden Sie C...

Zusammenfassung häufiger Probleme und Lösungen in Vue (empfohlen)

Es gibt einige Probleme, die nicht auf Vue beschr...

Schreiben Sie einen formellen Blog mit XHTML CSS

Der vollständige Name von Blog sollte Weblog sein,...

Bidirektionale verknüpfte Liste der JavaScript-Datenstruktur

Eine einfach verkettete Liste kann nur vom Anfang...