Puncte:1

Nu se poate crea un container Docker cu un volum montat dintr-un director creat de utilizator în rădăcina unei gazde ubuntu (EC2)

drapel in

Vreau să creez un container Docker care are un volum montat dintr-un director creat de utilizator în rădăcina gazdei Docker. Gazda este o instanță Ubuntu EC2.

Eroarea

Aș dori să montez /date directorul de mai jos într-un container Docker, dar primesc eroarea afișată:

ubuntu:~$ ls -l /
total 120
drwxr-xr-x 25 rădăcină rădăcină 4096 10 august 20:51 ./
drwxr-xr-x 25 rădăcină rădăcină 4096 10 august 20:51 ../
drwxr-xr-x 2 root root 4096 22 iulie 13:50 bin/
drwxr-xr-x 3 root root 4096 22 iulie 13:50 boot/
drwxr-xr-x 4 ubuntu ubuntu 4096 august 10 19:58 date/
...
drwxr-xr-x 8 root root 4096 30 mai 12:19 home/
...
drwxr-xr-x 3 root root 4096 20 iunie 13:39 mnt/
...
drwxr-xr-x 12 root root 4096 12 iunie 01:03 usr/
ubuntu:~$ docker run -it --rm -v /data:/data alpine
docker: Răspuns de eroare de la daemon: eroare la crearea căii sursei de montare „/data”: mkdir /data: sistem de fișiere doar pentru citire.

Aceeași comandă funcționează dacă folosesc un director care a venit cu instanța (de ex. /usr):

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

informatii suplimentare

Primesc aceeași eroare, chiar dacă fac următoarele:

  1. Folosind --montură în loc de -v, chiar și cu numai citire opțiune.
  2. Executați comanda de mai sus cu sudo.
  3. S-au schimbat permisiunile pe / și date director către 777
  4. S-a schimbat proprietarul din ubuntu la rădăcină
  5. Montați un subdirector, cum ar fi /data/subdir.

The df comanda indică faptul că nu există monturi speciale pe rădăcina instanței:

ubuntu:~$ df -h
Filesystem Size Used Avail Use% Montat pe
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

Daemonul docker rulează ca root:

ubuntu:~/$ ps -ef | grep dockerd
rădăcină 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 puncte/1 00:00:00 grep --color=auto dockerd

Mulțumesc anticipat. Aceasta este o problemă enervantă și aș fi crezut că ar fi ușor în Docker și AWS/EC2.

Puncte:1
drapel cz

Notă: Acest răspuns se aplică numai Ubuntu (și într-o oarecare măsură distribuțiilor derivate). Nu ar trebui aplicat la nicio altă distribuție.

Cauza principală a problemei este că ați instalat și ați rulat Docker într-o clipă, iar majoritatea oamenilor nu ar trebui să îl ruleze în acest fel. Când pornește un program limitat de snap, snapd creează un container în care să ruleze programul și numai fișierele care erau accesibile atunci când programul a fost pornit vor fi accesibile programului. Acesta include noul dvs. director /date, care nu există în containerul snap în care rulează docker, motiv pentru care docker încearcă (și nu reușește) să-l creeze.

De asemenea, versiunea de docker livrată cu Ubuntu în sine nu ar trebui utilizată, deoarece nu este ținută la zi. (Ei chiar ar trebui să-l țină actualizat sau să-l renunțe în întregime, dar nu conta că nici unul se va întâmpla în curând.)

Majoritatea oamenilor ar trebui să folosească Docker din depozitele oficiale Docker pentru a evita o mare varietate de probleme care apar cu pachetele docker Ubuntu.

drapel in
Acest lucru este foarte util. Când ați spus „Când pornește un program limitat de snap, snapd creează un container în care să ruleze programul”, am sperat că, dacă repornesc, Docker va vedea noul director (de exemplu, /data). Cu toate acestea, nu este cazul. Cu toate acestea, funcționează dacă pun directorul în /mnt (de exemplu, /mnt/data). De ce asta? Pot citi ceva care să mă ajute să înțeleg?
Michael Hampton avatar
drapel cz
@mherzog Cred că snap are o listă specifică de directoare pe care le va expune programului conținut. Dar, ca regulă generală, evit snap-ul.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.