Ich habe ein ziemlich eigenartiges Verhalten auf einer Maschine, auf der Jenkins und Docker installiert sind. Aus Gründen der Übersichtlichkeit wird Jenkins nicht als Docker-Container ausgeführt, sondern unter dem Benutzer jenkins
ausgeführt.Warum reagiert Jenkins auf dem Docker-Host auf HTTP-Anforderungen von internen Containern?
Wenn curl
in einem Container ausgeführt wird, erhalte ich eine 403:
[email protected]:/# curl -I www.google.co.uk
HTTP/1.1 403 Forbidden
Date: Tue, 30 May 2017 13:41:07 GMT
X-Content-Type-Options: nosniff
Set-Cookie: JSESSIONID.f1223778=36hjq9sozhveoe1bfsss1dnq;Path=/;HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-Type: text/html;charset=UTF-8
X-Hudson: 1.395
X-Jenkins: 2.46.3
X-Jenkins-Session: 2836b130
X-You-Are-Authenticated-As: anonymous
X-You-Are-In-Group-Disabled: JENKINS-39402: use -Dhudson.security.AccessDeniedException2.REPORT_GROUP_HEADERS=true or use /whoAmI to diagnose
X-Required-Permission: hudson.model.Hudson.Read
X-Permission-Implied-By: hudson.security.Permission.GenericRead
X-Permission-Implied-By: hudson.model.Hudson.Administer
Content-Length: 793
Server: Jetty(9.2.z-SNAPSHOT)
außerhalb des Behälters auf dem Host, erhalte ich die erwartete Antwort:
$ curl -I www.google.co.uk
HTTP/1.1 200 OK
Date: Tue, 30 May 2017 13:40:17 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: NID=104=mMKjBy002X3N_SkhkD_8xuAwpFuw03CFi0iOJjNX81FUHfMT6qTq95LcgRwdhrV_GZoUF9LQ1B9qAQPriN9Er3Bu2JWoqPgvt16TduuVj5QsNs9GiJTQBtaSXWic7G9E; expires=Wed, 29-Nov-2017 13:40:17 GMT; path=/; domain=.google.co.uk; HttpOnly
Transfer-Encoding: chunked
Accept-Ranges: none
Vary: Accept-Encoding
Jenkins ist offensichtlich, aber ich schuld Ich habe keine Ahnung, warum es HTTP-Verkehr abfangen würde, Container zu verlassen. Pinging Google funktioniert einwandfrei, ebenso wie das Senden von HTTPS-Anfragen. Keine andere Maschine besitzt dieses Problem (vermutlich, weil Jenkins nicht installiert ist). Also, was ist hier los? Wie bekomme ich Jenkins, um das Abfangen von HTTP von Docker-Containern zu stoppen?
aktualisieren
Ausschalten Jenkins' "Prevent Cross Site Request Forgery-Exploits" Option bewirkt, dass Jenkins nicht mehr zu 403s zurück. Stattdessen reagiert Jenkins auf jede HTTP-Anfrage innerhalb eines Containers mit der Dashboard-Seite, d. H. Der Standardseite.
Auch erwähnenswert ist, dass DNS gut funktioniert; Hostnamen werden in die richtigen IP-Adressen aufgelöst.
Ich werde Wireshark raus.