2016-04-27 13 views
1

Ich möchte Conf-Dateien in einem Docker-Bild ändern, aber ich möchte nicht stattdessen das Docker-Bild neu zu erstellen , Ich möchte dies durch die "Docker Run .... COMMAND" tun. Ich werde ein "echo XXX >> /etc/XXX.conf" in das COMMAND setzen. Ist das möglich?howto anhängen/ändern von Dateien in Docker-Container von 'docker run .... [Befehl]'

zum Beispiel, ich mag einen redis Sentinel-Cluster beginnen, die mindestens 2 redis-Server und 1 redis-Sentinel enthält. Der zweite Rediserver-Container benötigt den Status "slaveof" in der redis.conf.

Ich tue dies in den folgenden Schritten:

  1. Start redis-Server mit Port 6479 docker run -d -p 6479:6379 docker.io/redis

  2. Start Slave redis-Server mit 6579 von gleichen Docker Bilder verwenden, und geben Sie es ist Slave in der conf-Datei: docker run -d -p 6579:6379 docker.io/redis "/bin/echo 'slaveof 192.168.1.149 6479' >> /etc/redis.conf && redis-server /etc/redis.conf"

Hier den Befehl für ' Docker run‘ist: "/ ist/echo 'slaveof 192.168.1.149 6479' >> /etc/redis.conf & & redis-Server /etc/redis.conf"

  1. Start Sentinel, das ist ein weiterer Docker Bilder.

jedoch hielt ich an der 2. Stufe. Es gab den Fehlermeldung wie folgt aus:

/entrypoint.sh: Zeile 10:/bin/echo 'slaveof 192.168.1.149 6479' >> /etc/redis.conf & & redis-server/etc/redis conf: Keine solche Datei oder Verzeichnis

Also, wie kann ich spritzen oder conf Datei ändern thru ‚docker run‘ Klausel?

Antwort

1

Zuerst starten Sie Ihren Behälter, den er einige Namen zu geben, die Sie später benötigen (die leichter als aufzublicken Container-ID)

docker run --name container-name -d -p 6479:6379 docker.io/redis 
docker run --name aaaaa   -d -p 6479:6379 docker.io/redis 

Wenn Sie zu einem laufenden Container Problem anmelden müssen

docker exec -ti aaaaa /bin/bash 

die Ihnen eine interaktive Shell-Sitzung im Innern des Behälters geben, wo Sie Befehle nach Belieben ausgeben können ... Wenn Sie nur einen Befehl in einem laufenden Container ohne die interaktiven Aspekt Ausgabe

ausstellen mögen
docker exec -ti aaaaa /some/command 

, wo das/some/Befehl wird im Innern des Behälters ausgeführt werden ... so so etwas in Ihrem Fall

docker exec -ti aaaaa "/bin/echo 'slaveof 192.168.1.149 6479' >> /etc/redis.conf && redis-server /etc/redis.conf" 
+0

Dank Scott, das für mich nicht funktioniert. Btw, der Hafenarbeiter aaaaa sollte Port 6579 verwenden :) Ich überprüft Ihre Methode auf eine dieser beiden Arten: a) vom Host, führen Sie "redis-CLI-P 6579 Info-Replikation", es sagt immer noch, dass dies redis ist Master, aber wenn alles funktioniert, sollte es Slave sein. b) Ich logge mich mit "docker exec -ti aaaaaa/bin/bash" ein, es gibt keine /etc/redis.conf. Dies bedeutet, dass das "Echo ....." nicht funktioniert. Am Ende sollte die "Docker exec" -Klausel meiner Meinung nach nicht funktionieren, weil der Docker-Container gestartet und funktionsfähig ist. "docker exec" wirkt sich nicht auf das Verhalten des vorhandenen Redisers aus. – Cross

Verwandte Themen