Es kann kein Docker-Container mit einem Volume erstellt werden, das aus einem vom Benutzer erstellten Verzeichnis im Stammverzeichnis eines Ubuntu-Hosts (EC2) bereitgestellt wird.

Es kann kein Docker-Container mit einem Volume erstellt werden, das aus einem vom Benutzer erstellten Verzeichnis im Stammverzeichnis eines Ubuntu-Hosts (EC2) bereitgestellt wird.

Ich möchte einen Docker-Container erstellen, der ein Volume aus einem vom Benutzer erstellten Verzeichnis im Stammverzeichnis des Docker-Hosts gemountet hat. Der Host ist eine Ubuntu EC2-Instanz.

Der Fehler

Ich möchte das /dataunten stehende Verzeichnis in einem Docker-Container mounten, erhalte jedoch die folgende Fehlermeldung:

ubuntu:~$ ls -l /
total 120
drwxr-xr-x  25 root   root    4096 Aug 10 20:51 ./
drwxr-xr-x  25 root   root    4096 Aug 10 20:51 ../
drwxr-xr-x   2 root   root    4096 Jul 22 13:50 bin/
drwxr-xr-x   3 root   root    4096 Jul 22 13:50 boot/
drwxr-xr-x   4 ubuntu ubuntu  4096 Aug 10 19:58 data/
...
drwxr-xr-x   8 root   root    4096 May 30 12:19 home/
...
drwxr-xr-x   3 root   root    4096 Jun 20 13:39 mnt/
...
drwxr-xr-x  12 root   root    4096 Jun 12 01:03 usr/
ubuntu:~$ docker run -it --rm -v /data:/data alpine
docker: Error response from daemon: error while creating mount source path '/data': mkdir /data: read-only file system.

Derselbe Befehl funktioniert, wenn ich ein Verzeichnis verwende, das mit der Instanz geliefert wurde (z. B. /usr):

ubuntu:~$ docker run -it --rm -v /usr:/data alpine 
/ # ls /data
bin      games    include  lib      lib32    local    sbin     share    src

Weitere Informationen

Ich erhalte den gleichen Fehler, auch wenn ich Folgendes mache:

  1. Verwenden Sie --mountanstelle von -v, auch mit der readonlyOption.
  2. Führen Sie den obigen Befehl mit aus sudo.
  3. Die Berechtigungen für /das dataVerzeichnis wurden geändert in777
  4. Eigentümerwechsel von ubuntunachroot
  5. Mounten Sie ein Unterverzeichnis wie beispielsweise /data/subdir.

Der dfBefehl gibt an, dass auf der Stammebene der Instanz keine speziellen Mounts vorhanden sind:

ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            7.9G     0  7.9G   0% /dev
tmpfs           1.6G  872K  1.6G   1% /run
/dev/xvda1      194G  180G   14G  93% /
tmpfs           7.9G     0  7.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/loop0      132M  132M     0 100% /snap/docker/796
/dev/loop2       25M   25M     0 100% /snap/amazon-ssm-agent/4046
/dev/loop3       56M   56M     0 100% /snap/core18/2128
/dev/loop1      100M  100M     0 100% /snap/core/11316
/dev/loop4      100M  100M     0 100% /snap/core/11420
/dev/loop5       56M   56M     0 100% /snap/core18/2074
/dev/loop6       34M   34M     0 100% /snap/amazon-ssm-agent/3552
s3fs            256T     0  256T   0% /mnt/s3
tmpfs           1.6G     0  1.6G   0% /run/user/1000

Der Docker-Daemon wird als Root ausgeführt:

ubuntu:~/$ ps -ef | grep dockerd
root       964     1  1 19:49 ?        00:00:55 dockerd --group docker --exec-root=/run/snap.docker --data-root=/var/snap/docker/common/var-lib-docker --pidfile=/run/snap.docker/docker.pid --config-file=/var/snap/docker/796/config/daemon.json
root      1302     1  0 19:49 ?        00:00:01 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ubuntu    6868  2649  0 21:20 pts/1    00:00:00 grep --color=auto dockerd

Vielen Dank im Voraus. Dies ist ein ärgerliches Problem und ich hätte gedacht, dass es in Docker und AWS/EC2 einfach wäre.

Antwort1

Notiz:Diese Antwort gilt nur für Ubuntu (und in gewissem Maße abgeleitete Distributionen). Sie sollte nicht auf andere Distributionen angewendet werden.

Die Hauptursache des Problems ist, dass Sie Docker als Snap installiert und ausgeführt haben, und die meisten Leute sollten es nicht auf diese Weise ausführen. Wenn ein durch Snap eingeschränktes Programm gestartet wird, erstellt snapd einen Container, in dem das Programm ausgeführt wird, und nur Dateien, die beim Start des Programms zugänglich waren, sind für das Programm zugänglich. Dazu gehört Ihr neues Verzeichnis /data, das im Snap-Container, in dem Docker ausgeführt wird, nicht vorhanden ist, weshalb Docker versucht (und scheitert), es zu erstellen.

Die mit Ubuntu mitgelieferte Docker-Version sollte ebenfalls nicht verwendet werden, da sie nicht auf dem neuesten Stand gehalten wird. (Sie sollten sie entweder auf dem neuesten Stand halten oder ganz fallen lassen, aber rechnen Sie nicht damit, dass eines von beiden in naher Zukunft passieren wird.)

Die meisten Menschen solltenDocker aus den offiziellen Docker-Reposum eine Vielzahl von Problemen zu vermeiden, die mit den Docker-Paketen von Ubuntu auftreten.

verwandte Informationen