Wie zu montieren docker socket als Band in docker-container mit der richtigen Gruppe
Möchte ich ausführen, eine Jenkins-Instanz in einem docker-container.
Ich will Jenkins selbst in der Lage sein sich zu drehen docker-Container als Sklaven zum ausführen von tests.
Scheint es der beste Weg, dies zu tun ist die Verwendung
docker run -v /var/run.docker.sock:/var/run/docker.sock -p 8080:8080 -ti my-jenkins-image
Den Dockerfile
ich verwende, ist
FROM jenkins
COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt
USER root
RUN apt-get update && apt-get install -y docker.io
RUN usermod -aG docker jenkins
USER jenkins
Wenn ich starten Sie eine bash-session in meiner Ausführung-container und führen docker info
auf meinem Bild, das ich bekommen
$ docker info
FATA[0000] Get http:///var/run/docker.sock/v1.18/info: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
Und wenn ich die bash-Sitzung als root
docker exec -u 0 -ti cocky_mccarthy bash
root@5dbd0efad2b0:/# docker info
Containers: 42
Images: 50
...
Also ich denke, die docker
Gruppe ich bin das hinzufügen der Jenkins Benutzer ist die Gruppe für die internen docker damit die Buchse nicht lesbar, ohne sudo
. Das ist irgendwie ein problem, wie die Jenkins-Andockfenster-plugin etc. sind nicht zu verwenden sudo
.
Wie kann ich montieren Sie die Buchse, so kann es verwendet werden, aus dem Bild ohne sudo
?
- Hast du eine Lösung für dein problem? Ich stehe vor dem gleichen Problem jetzt
- Meine Lösung ist die änderung der Besitz auf docker.Socke nach container begonnen.
docker exec -it -u root jenkins-docker chown jenkins /var/run/docker.sock
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein bisschen spät, aber dies könnte helfen, andere Benutzer, die kämpfen mit dem gleichen problem:
Hier das problem, dass die
docker
Gruppe auf Ihrem docker-host hat eine andere group-id aus der id desdocker
Gruppe in Ihrem container. Da der daemon kümmert sich nur über die id und nicht über den Namen der Gruppe Ihre Lösung wird nur funktionieren, wenn diese id ' s entsprechen, durch Zufall.Den Weg, um dieses Problem zu lösen ist, indem Sie entweder über tcp statt über unix-Sockets mithilfe der -H option beim Start Docker-engine. Sollten Sie sehr vorsichtig mit diesem, denn so kann jeder, der Zugriff auf diesen port, um root-Zugriff auf Ihr system.
Ein sicherer Weg, dies zu beheben ist, dafür zu sorgen, dass die
docker
Gruppe im inneren des Behälters enden, haben die gleiche group-id wie derdocker
Gruppe außerhalb des Containers. Sie können dies tun, indem Sie bauen Argumente für Ihredocker build
:Dockerfile:
Dann Bau es mit
Nachdem diese Sie können Ihre Bild-und Andockfenster-Zugang als nicht-root -
Weil diese Lösung richtet sich auf die Lieferung der korrekten Gruppen-id, um den docker-daemon, wenn das image erstellt wird, das Bild würde müssen gebaut werden, auf der Maschine(s), wo es verwendet wird. Wenn Sie bauen das Bild, schieben Sie es und jemand anderer zieht es auf Ihrer Maschine, stehen die Chancen, dass die Gruppen-id ' s übereinstimmen, wird nicht wieder.
docker
Gruppen-ID entspricht, die auf dem host und im inneren des Containers war genau das, was wir brauchten, um zu beheben, wenn Sie vor dem gleichen Problem. Danke!Ich habe Ihre dockerfile, machte aber eine kleine änderung:
Nach dem erstellen des Bildes kann ich es starten über (ich bin auf centos7):
Sie versucht, das Paket zu installieren Andockfenster.io in Ihrem Bild. Aber dieses Paket ist auch auf dem host (sonst ist es nicht möglich, zu laufen docker-Containern drauf). So ist Es empfehlenswert, montieren Sie diese auf den container statt der Installation in der docker-Datei.
Ich denke, die montiert /lib64/... ist speziell für Centos 7.