Ich habe ein Image, das ich verwende, um meine CI/CD-Builds (mit GitLab CE) auszuführen. Ich möchte meine app tun so etwas implementieren aus dem Behälter:Zugriff auf den Docker-Computer des Hosts aus dem Container
eval "$(docker-machine env manager)"
sudo docker stack deploy --compose-file docker-stack.yml web
Aber ich möchte die Docker-Maschine für den Zugriff Maschinen auf dem Host-System definiert, da der Behälter zerstört wird und ich möchte keine Zugriffsdetails in das Bild aufnehmen.
Ich habe ein paar Dinge ausprobiert
Zugriff auf die Remote-Host via docker-machine
- Erstellen Sie die Docker-Maschine auf dem Host und montieren Sie die
MACHINE_STORAGE_PATH
so dass es an dem Behälter vorhanden ist
- Verbinden Sie sich manuell mit dem Remote-Docker-Gerät aus dem Container und stellen Sie
MACHINE_STORAGE_PATH
auf ein eingehängtes Volume - ein Montage der Docker Buchse
In beiden Fällen kann ich sehen, die Maschine Speicher wird beibehalten, aber wenn ich einen neuen Container erstellen und auszuführen sind docker-machine ls
keine der Maschinen aufgeführt.
Zugriff auf die Remote-Host via DOCKER_HOST
- Weiterleiten, um die Remote-Rechner Docker Port an den Host-Docker Port
docker-machine ssh manager-1 -N -L 2376:localhost:2376
export DOCKER_HOST=:2376
- Docker Sagen Sie den gleichen certs zu verwenden, die von docker- verwendet werden Maschine:
export DOCKER_TLS_VERIFY=1
undexport DOCKER_CERT_PATH=/Users/me/.docker/machine/machines/manager-1
- Test mit
docker info
Das gibt mir error during connect: Get https://localhost:2376/v1.26/info: x509: certificate signed by unknown authority
Alle Ideen, wie ich eine Remote-Bereitstellung von in einem Behälter durchführen kann?
Dank
EDIT
Hier eine grafische Darstellung besser zu versuchen und zu helfen, das Szenario zu kommunizieren.
ich würde 'docker.sock' nicht montieren wie es empfohlen wurde. Siehe diesen Artikel für Informationen https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/ Sie eröffnen ein großes Sicherheitsloch. –
Würden Sie dies als ein großes Risiko betrachten, wenn der einzige Container, der auf dem Socket ausgeführt wird, ein Build-Container ist? – jaredcnance
Normalerweise möchten Sie keinen Container innerhalb eines Containers ausführen. Wenn Sie Zugriff auf Volumes benötigen, sollten Sie stattdessen "--link" oder mit dem "docker> = 1.12" ein Netzwerk-Overlay erstellen. Es ist nichts falsch daran, einen Container zu verwenden, um andere Container zu starten. Sie müssen nur auf dem Hostcomputer und nicht innerhalb des Containers gestartet werden. Containern in Containern zu tun ist ein Anti-Pattern, das Sie im Laufe der Zeit nur schwer verwalten können. –