GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich lsof in einem Docker ersetzen (nativ, nicht LXC-basiert)

(HINWEIS:In der Frage ist unklar, wie der Fragesteller in den Docker-Container gelangt. Ich gehe annehmen docker exec -it CONTAINER bash verwendet wurde.)

Ich hatte dieses Problem bei der Verwendung eines Docker-Images basierend auf centos:7 mit Docker-Version 1.9.0 und um dies zu überwinden, habe ich einfach ausgeführt:

docker exec --privileged -it CONTAINER bash

Beachten Sie die Aufnahme von --privileged .

Mein naives Verständnis für den Grund, warum dies erforderlich ist:Es scheint, dass Docker sich bemüht, den Container "sicherer" zu machen, wie hier dokumentiert.


Hah, die Handlung verdichtet sich. Wenn jemand eine bessere Antwort hat, schreibe sie bitte auf und ich werde sie akzeptieren, wenn sie akzeptabel ist. Aber hier der offensichtliche Grund. Wie fahrlässig von mir, die Protokolldateien auf dem Host zu ignorieren :

Jun 12 01:29:46 hostmachine kernel: [140235.718807] audit_printk_skb: 183 callbacks suppressed
Jun 12 01:29:46 hostmachine kernel: [140235.718810] type=1400 audit(1402536586.521:477): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="trace" denied_mask="trace" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718860] type=1400 audit(1402536586.521:478): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718886] type=1400 audit(1402536586.521:479): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718899] type=1400 audit(1402536586.521:480): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718921] type=1400 audit(1402536586.521:481): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718954] type=1400 audit(1402536586.521:482): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.719001] type=1400 audit(1402536586.521:483): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.719043] type=1400 audit(1402536586.521:484): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.719086] type=1400 audit(1402536586.521:485): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.719126] type=1400 audit(1402536586.521:486): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"

Apparmor scheint also der Schuldige zu sein, obwohl ich herausfinden muss, wie ich es davon überzeugen kann, dies zuzulassen, ohne die Sicherheit von Host/Container zu gefährden, oder um zu sehen, ob es überhaupt möglich ist, ohne die Sicherheit zu gefährden.


Eine andere Möglichkeit, diesmal mit einer feineren Sicherheitseinstellung:Geben Sie dem Docker-Container das SYS_PTRACE-Privileg:

docker run --cap-add=SYS_PTRACE ...

Linux
  1. Dateien finden, die ein Benutzer nicht lesen kann?

  2. Wie kann ich überprüfen, ob eine Datei vorhanden ist, und einen Befehl ausführen, wenn dies nicht der Fall ist?

  3. Kann read(2) Null zurückgeben, wenn es nicht bei EOF ist?

  4. Wie kann ich per Linux-Skript prüfen, ob PostgreSQL installiert ist oder nicht?

  5. Wie kann ich R dazu bringen, meine Umgebungsvariablen zu lesen?

Kann ein Skript ausführbar, aber nicht lesbar sein?

Wie führe ich ein Programm in einem Docker-Container aus?

Wie kann ich die Dokumentation zu integrierten zsh-Befehlen lesen?

Wie kann ich andere Container in einem Docker-Netzwerk über ihren Hostnamen anpingen?

Wie behebt man updatedb:Kann Gruppe `mlocate' auf Entware nicht finden?

Warum funktioniert mein Crontab nicht und wie kann ich es beheben?