Bagaimana cara memasang jalur Host absolut sebagai volume bernama di komposisi buruh pelabuhan?

Saya sudah mencoba solusinya di utas stackoverflow ini. Itu tidak berhasil untuk saya, seperti yang ditunjukkan di bawah ini.

Ini file docker-compose.yml saya:

version: "3.7"
services:
  db:
    image: mysql
    volumes:
     - data:/var/lib/mysql

volumes:
  data:
    driver_opts:
      type: none
      device: /usr/local/opt/mysql/mywebsite.com
      o: bind  

Berikut hasil docker-compose up:

$ docker-compose up
Creating volume "mycontainer_data" with default driver
Recreating 45bc03b2c674_mycontainer_db_1 ... error

ERROR: for 45bc03b2c674_mycontainer_db_1  Cannot create container for service db: error while mounting volume with options: type='none' device='/usr/local/opt/mysql/mywebsite.com' o='bind': no such file or directory

ERROR: for db  Cannot create container for service db: error while mounting volume with options: type='none' device='/usr/local/opt/mysql/mywebsite.com' o='bind': no such file or directory
ERROR: Encountered errors while bringing up the project.

Daripada type: none, saya juga mencoba type: volume dan type: bind, tetapi saya mendapatkan kesalahan yang sama.

Direktorinya jelas ada:

$ ls -al /usr/local/opt/mysql/
...
drwxr-xr-x   2 cameronhudson  staff      64 Jun 10 10:32 mywebsite.com
...


person Cameron Hudson    schedule 10.06.2019    source sumber


Jawaban (1)


Ada 2 alasan mengapa konfigurasi saya tidak berfungsi.

Pertama, Docker tidak mengikuti symlink, dan direktori mysql adalah symlink:

$ ls -al /usr/local/opt | grep mysql
lrwxr-xr-x    1 cameronhudson  admin    22 Jan 23 17:42 mysql -> ../Cellar/mysql/8.0.13

Namun, bahkan setelah menggunakan jalur tanpa symlink apa pun, /databases/mywebsite.com, saya terus mengalami kesalahan no such file or directory yang sama.

Saya menemukan bahwa jika saya mengubah file docker-compose.yml saya untuk memasang direktori ini sebagai volume tanpa nama, saya mendapatkan kesalahan lain yang lebih masuk akal:

version: "3.7"
services:
  db:
    image: mysql
    volumes:
     - /databases/mywebsite.com:/var/lib/mysql

Kesalahan baru:

ERROR: for mycontainer_db_1  Cannot start service db: b'Mounts denied: \r\nThe path /databases/mywebsite.com\r\nis not shared from OS X and is not known to Docker.\r\nYou can configure shared paths from Docker -> Preferences... -> File Sharing.\r\nSee https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.\r\n.'

Setelah Saya menambahkan jalur ini di Docker Desktop, saya dapat up layanan menggunakan konfigurasi asli saya. Ini juga berfungsi dengan type: none, type: volume, type: bind, atau tidak menyertakan type sama sekali.

person Cameron Hudson    schedule 10.06.2019
comment
Apa maksud Anda menambahkan jalur ini di Docker Desktop? - person Slav; 06.02.2020
comment
@Slav Docker Desktop adalah paket dari Docker. Menginstalnya akan menginstal docker CLI dan daemon. Info lebih lanjut di sini: docker.com/products/docker-desktop - person Cameron Hudson; 07.02.2020
comment
Ya, saya sudah menginstal Docker Desktop. Ini menunjukkan container yang sedang berjalan, dan memungkinkan untuk memulai/menghentikan/menghapus/memeriksanya. Di mana di Docker Desktop Anda dapat menambahkan jalur ke volume? - person Slav; 07.02.2020
comment
@Slav Docker Desktop -› Preferensi -› Sumber Daya -› Berbagi File - person Cameron Hudson; 07.02.2020