2016-08-04 9 views
1

Ist es möglich, eine Funktion (zB: NET_ADMIN) hinzuzufügen, nachdem der Container tatsächlich gestartet wurde?Wie können wir einem laufenden Docker-Container Funktionen hinzufügen?

Ich habe vor einigen Tagen einen Container gestartet und ein von ihm bereitgestellter Dienst wird von mehreren anderen Prozessen verwendet, die auf anderen Servern remote ausgeführt werden. Ich muss eine Loopback-Schnittstelle hinzufügen, aber leider habe ich vergessen, den Container mit --cap-add=NET_ADMIN zu starten und konnte daher die Schnittstelle jetzt nicht hinzufügen.

Ich suche eine Option, wenn es möglich ist, diese Fähigkeit irgendwie zu diesem Container zu geben.

+0

Eine Loopback-Schnittstelle ist standardmäßig in einem Container enthalten, auch wenn Sie eine ohne Netzwerk starten. Welche Optionen hast du benutzt, um deine ohne eine zu starten? – BMitch

+0

Die Anforderung besteht darin, zusätzliche Loopback-Schnittstellen hinzuzufügen, um zusätzliche IP-Adressen zuzuweisen – VanagaS

+0

Hinzufügen von Funktionen zu einem laufenden Container wäre nett. Auch notwendig, wenn Sie beispielsweise iptables verwenden müssen. – jjmontes

Antwort

-2

Sie können Befehle in einem laufenden Container mit docker exec -it {container_id} /bin/bash ausführen. Es wird eine Bash für Sie erstellen, mit der Sie Befehle ausführen können. Im Allgemeinen ist es jedoch keine gute Übung, Änderungen an den Bildzuständen vorzunehmen, da dadurch die Portabilität von Bildern aufgehoben wird.

2

Nein, Sie können die Funktionen eines aktiven Containers nicht ändern. Diese können nur definiert werden, wenn Sie den Container erstellen oder ausführen (was nur ein create + start ist). Sie müssen einen neuen Container mit den gewünschten Funktionen erstellen.

Ich sollte darauf hinweisen, dass Sie einen laufenden Container mit docker network connect zusätzliche Netzwerkschnittstellen zuweisen können, aber ich kenne keine Loopback-Treiber, die Sie verwenden könnten, um Ihr Problem mit dieser Technik zu lösen.

+0

Ich habe in diesem Container eine Anwendung installiert, die fest codierte (zugängliche) IP-Adressen für die Kommunikation mit externen Diensten verwendet. Ich habe die externen Dienste in diesem Container installiert. Die Loopback-Konfiguration soll sicherstellen, dass die Dienste innerhalb des Containers selbst kommunizieren. – VanagaS

+0

Es empfiehlt sich, jeden Dienst in einem separaten Container zu installieren. Sie können sie in ihrem eigenen Andocknetzwerk ausführen lassen und diese Netzwerke an Ihren aktiven Container anhängen.Aus diesen und Ihren anderen Fragen klingt es, als ob Sie versuchen, Ihren Container als VM anstatt als Anwendungsisolationswerkzeug zu verwenden, was für Container ein Anti-Pattern ist. – BMitch

+0

Service ist nur eine weitere WAR-Datei, die auf demselben j2ee-Server ausgeführt werden kann. Ich möchte nicht unnötig ein anderes Bild erstellen, das sonst nicht verwendet wird. – VanagaS

3

Vanagas

1.Stop Container:

docker stop yourcontainer; 

2.Get Container-ID:

docker inspect yourcontainer; 

3.Modify hostconfig.json (default Andockfensters Pfad:/var/lib/Docker, können Sie Ihre ändern)

vim /var/lib/docker/containers/containerid/hostconfig.json 

4. Suchen Sie "CapAdd", und ändern Sie Null zu ["NET_ADMIN"];

....,"VolumesFrom":null,"CapAdd":["NET_ADMIN"],"CapDrop":null,.... 

5.Docker im Host-Rechner neu starten;

service docker restart; 

6.Starten Sie yourconatiner;

docker start yourcontainer; 

es funktioniert für mich, viel Spaß.

Verwandte Themen