Docker-Container – touch: Berechtigung verweigert

Docker-Container – touch: Berechtigung verweigert

Ich habe hier ein seltsames Problem, bei dem ich nicht verstehe, was da schief läuft.

Ich führe alles in einem Docker-Container auf meiner Linux-Box (Ubuntu 16.04 LTS) aus:

docker run -ti --rm promregator/promregator:0.2.1 /bin/bash

(Hinweis: Das Bild ist öffentlich verfügbar über hub.docker.com). Der Befehl

docker version

(auf dem Host) gibt zurück

Client:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 22:01:48 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 22:01:48 2016
 OS/Arch:      linux/amd64

Im Container möchte ich eine Datei wie diese erstellen:

promregator@6a68713fafc9:/$ cd /opt/promregator
promregator@6a68713fafc9:/opt/promregator$ touch test
touch: cannot touch 'test': Permission denied

(promregator ist der Benutzer, mit dem das Image standardmäßig ausgeführt wird). Beachten Sie, dass

  • Das Verzeichnis stammt direkt aus dem Image und ist nicht auf das Volume abgebildet.
  • Das Verzeichnis gehört demselben Benutzer und die Berechtigungen lauten 0750:

    promregator@6a68713fafc9:/opt/promregator$ ls -al
    total 34348
    drwxr-x--- 2 promregator promregator     4096 Apr  1 01:00 .
    drwxr-xr-x 5 root        root            4096 Mar 20 01:01 ..
    -rw-r----- 1 promregator promregator 35159385 Apr  1 00:59 promregator.jar
    -rwxrwx--- 1 promregator promregator      642 Apr  1 00:57 promregator.sh
    

    Numerisch ist der Benutzer 1000

    promregator@6a68713fafc9:/opt/promregator$ ls -aln .
    total 34348
    drwxr-x--- 2 1000 1000     4096 Apr  1 01:00 .
    [...]
    

Beachten Sie auch, dass derselbe Vorgang auch bei folgenden Geräten funktioniert /home/promregator:

promregator@6a68713fafc9:/opt/promregator$ cd /home/promregator
promregator@6a68713fafc9:~$ touch test
promregator@6a68713fafc9:~$ ls -al .
total 8
drwx------ 2 promregator promregator 4096 Apr  7 11:45 .
drwxr-xr-x 4 root        root        4096 Apr  7 11:45 ..
-rw-r--r-- 1 promregator promregator    0 Apr  7 11:45 test
promregator@6a68713fafc9:~$ ls -aln .
total 8
drwx------ 2 1000 1000 4096 Apr  7 11:45 .
drwxr-xr-x 3    0    0 4096 Apr  7 11:45 ..
-rw-r--r-- 1 1000 1000    0 Apr  7 11:45 test

Beachten Sie, dass, wenn ich den Container als Root ausführe, indem ich

docker run -ti --rm -u root promregator/promregator:0.2.1 /bin/bash

Ich kann die Datei am ersten Speicherort erstellen:

root@eb29fa8acb95:/# cd /opt/promregator/
root@eb29fa8acb95:/opt/promregator# touch test

Dies sagt mir, dass mit dem Benutzer etwas „seltsam“ ist promregator.

Auf einem anderen Host (ich habe die Sha1-IDs der Images verglichen) kann die Datei wie erwartet erstellt werden, wenn der Container mit gestartet wurde docker run -ti --rm promregator/promregator:0.2.1 /bin/bash. Die Versionsinformationen dieses Hosts zeigen

Client:
 Version:       17.12.0-ce
 API version:   1.35
 Go version:    go1.9.2
 Git commit:    c97c6d6
 Built: Wed Dec 27 20:11:19 2017
 OS/Arch:       linux/amd64

Server:
 Engine:
  Version:      17.12.0-ce
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.9.2
  Git commit:   c97c6d6
  Built:        Wed Dec 27 20:09:54 2017
  OS/Arch:      linux/amd64
  Experimental: false

Irgendwelche Ideen, Hinweise, ... für mich, was das sein könnte?

Dank im Voraus!

Antwort1

Ich hatte heute das gleiche Problem. Meine Lösung besteht darin, Selinux mit „setenforce 0“ auszuschalten.

verwandte Informationen