ฉันจะเมานต์เส้นทางโฮสต์แบบสัมบูรณ์เป็นโวลุ่มที่มีชื่อใน docker-compose ได้อย่างไร

ฉันได้ลองใช้วิธีแก้ปัญหาใน เธรด stackoverflow นี้ แล้ว มันไม่ได้ผลสำหรับฉัน ดังที่แสดงด้านล่าง

นี่คือไฟล์ docker-compose.yml ของฉัน:

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  

นี่คือผลลัพธ์ของ 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.

แทนที่จะเป็น type: none ฉันได้ลอง type: volume และ type: bind แล้ว แต่ได้รับข้อผิดพลาดเดียวกัน

มีไดเร็กทอรีอยู่อย่างชัดเจน:

$ 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 แหล่งที่มา


คำตอบ (1)


มี 2 ​​สาเหตุที่ทำให้การกำหนดค่าของฉันไม่ทำงาน

ขั้นแรก นักเทียบท่าไม่ติดตาม symlink และไดเร็กทอรี mysql คือ 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

อย่างไรก็ตาม แม้หลังจากใช้เส้นทางที่ไม่มีสัญลักษณ์ใดๆ /databases/mywebsite.com ฉันยังคงพบข้อผิดพลาด no such file or directory เดิมต่อไป

ฉันพบว่าหากฉันเปลี่ยนไฟล์ docker-compose.yml เพื่อเมานต์ไดเร็กทอรีนี้เป็นโวลุ่มที่ไม่ระบุชื่อ ฉันได้รับข้อผิดพลาดอื่นที่สมเหตุสมผลกว่า:

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

ข้อผิดพลาดใหม่:

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.'

หลังจากที่ฉันเพิ่มเส้นทางนี้ใน Docker Desktop ฉันสามารถ up บริการโดยใช้การกำหนดค่าดั้งเดิมของฉัน นอกจากนี้ยังใช้งานได้กับ type: none, type: volume, type: bind หรือปล่อย type ออกไปโดยสิ้นเชิง

person Cameron Hudson    schedule 10.06.2019
comment
คุณหมายถึงอะไรเพิ่มเส้นทางนี้ใน Docker Desktop - person Slav; 06.02.2020
comment
@Slav Docker Desktop เป็นแพ็คเกจจาก Docker การติดตั้งจะติดตั้ง docker CLI และ daemon ข้อมูลเพิ่มเติมที่นี่: docker.com/products/docker-desktop - person Cameron Hudson; 07.02.2020
comment
ใช่ ฉันติดตั้ง Docker Desktop แล้ว โดยจะแสดงคอนเทนเนอร์ที่ทำงานอยู่ และอนุญาตให้เริ่ม/หยุด/ลบ/ตรวจสอบคอนเทนเนอร์เหล่านั้น คุณสามารถเพิ่มเส้นทางไปยังโวลุ่มได้ที่ไหนใน Docker Desktop - person Slav; 07.02.2020
comment
@Slav Docker Desktop -> การตั้งค่า -> ทรัพยากร -> การแชร์ไฟล์ - person Cameron Hudson; 07.02.2020