วิธีการติดตั้งโลคัลวอลุ่มในเครื่องเทียบท่า


86

ฉันพยายามใช้ Docker-machine กับนักเทียบท่าเขียน ไฟล์ docker-compose.yml มีนิยามดังนี้:

web:
  build: .
  command: ./run_web.sh
  volumes:
    - .:/app
  ports:
    - "8000:8000"
  links:
    - db:db
    - rabbitmq:rabbit
    - redis:redis

เมื่อการรันdocker-compose up -dทั้งหมดเป็นไปด้วยดีจนกระทั่งพยายามรันคำสั่งและเกิดข้อผิดพลาด:

ไม่สามารถเริ่มคอนเทนเนอร์ b58e2dfa503b696417c1c3f49e2714086d4e9999bd71915a53502cb6ef43936d: [8] ข้อผิดพลาดของระบบ: exec: "./run_web.sh": stat ./run_web.sh: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว

โลคัลวอลุ่มไม่ได้ต่อเข้ากับเครื่องระยะไกล อะไรคือกลยุทธ์ที่แนะนำในการเชื่อมต่อไดรฟ์ข้อมูลในเครื่องด้วยรหัสของ webapps


โครงสร้างของโครงการและนักเทียบท่า - compose.yml คล้ายกับบทช่วย
jdcaballerov

1
สิ่งนี้ควรอยู่ในเอกสาร Docker-compose เพื่อเป็นคำแนะนำที่เป็นประโยชน์สำหรับผู้ที่อาจเริ่มต้นใช้งานการเขียนในเครื่อง จะช่วยฉันได้หลายชั่วโมงในช่วงเวลา WTF ที่พยายามหาสาเหตุว่าทำไมเส้นทางไฟล์ของฉันไม่ถูกต้องหรือไม่พบ ไม่ฉันแค่รู้สึกงี่เง่า
timbrown

คำตอบ:


93

Docker-machine จะติดตั้งไดเร็กทอรีผู้ใช้โดยอัตโนมัติ ... แต่บางครั้งแค่นั้นก็ไม่เพียงพอ

ฉันไม่รู้เกี่ยวกับนักเทียบท่า 1.6 แต่ใน 1.8 คุณสามารถเพิ่มเมาท์เพิ่มเติมให้กับนักเทียบท่าเครื่อง

เพิ่ม Virtual Machine Mount Point (ตอนที่ 1)

CLI : (ใช้ได้เฉพาะเมื่อเครื่องหยุดทำงาน)

VBoxManage sharedfolder add <machine name/id> --name <mount_name> --hostpath <host_dir> --automount

ตัวอย่างใน windows จะเป็น

/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe sharedfolder add default --name e --hostpath 'e:\' --automount

GUI : (ไม่ต้องการให้เครื่องหยุดทำงาน)

  1. เริ่ม "Oracle VM VirtualBox Manager"
  2. คลิกขวา<machine name>(ค่าเริ่มต้น)
  3. การตั้งค่า ...
  4. โฟลเดอร์ที่ใช้ร่วมกัน
  5. ไอคอนโฟลเดอร์ + ทางด้านขวา (เพิ่มการแชร์)
  6. เส้นทางโฟลเดอร์: <host dir>(e :)
  7. ชื่อโฟลเดอร์: <mount name>(e)
  8. ตรวจสอบที่ "ติดตั้งอัตโนมัติ" และ "ทำให้ถาวร" (อ่านเฉพาะเมื่อคุณต้องการ ... )

การติดตั้งใน boot2docker (ตอนที่ 2)

ติดตั้งด้วยตนเองใน boot2docker :

  1. มีหลายวิธีในการเข้าสู่ระบบใช้ "Show" ใน "Oracle VM VirtualBox Manager" หรือ ssh / putty ลงใน docker ตามที่อยู่ IP docker-machine ip defaultฯลฯ ...
  2. sudo mkdir -p <local_dir>
  3. sudo mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <local_dir>

แต่จะดีแค่นี้จนกว่าคุณจะรีสตาร์ทเครื่องแล้วเมาท์หาย ...

การเพิ่มออโตเมาท์ลงใน boot2docker :

ขณะล็อกอินเข้าเครื่อง

  1. แก้ไข / สร้าง (ในฐานะ root) /mnt/sda1/var/lib/boot2docker/bootlocal.shsda1 อาจแตกต่างไปสำหรับคุณ ...
  2. เพิ่ม

    mkdir -p <local_dir>
    mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <local_dir>
    

ด้วยการเปลี่ยนแปลงเหล่านี้คุณควรมีจุดเชื่อมต่อใหม่ นี่เป็นหนึ่งในไม่กี่ไฟล์ที่ฉันพบซึ่งเรียกว่าขณะบู๊ตและเป็นไฟล์ถาวร จนกว่าจะมีทางออกที่ดีกว่านี้ควรใช้งานได้


วิธีการเก่า: แนะนำน้อยกว่าแต่ปล่อยให้เป็นทางเลือก

  • แก้ไข (ในฐานะ root) /mnt/sda1/var/lib/boot2docker/profilesda1 อาจแตกต่างไปสำหรับคุณ ...
  • เพิ่ม

    add_mount() {
      if ! grep -q "try_mount_share $1 $2" /etc/rc.d/automount-shares ; then
        echo "try_mount_share $1 $2" >> /etc/rc.d/automount-shares
      fi
    }
    
    add_mount <local dir> <mount name>
    

เป็นทางเลือกสุดท้ายคุณสามารถใช้ทางเลือกที่น่าเบื่อกว่าเล็กน้อยและคุณสามารถแก้ไขอิมเมจสำหรับบูตได้

  • git -c core.autocrlf=false clone https://github.com/boot2docker/boot2docker.git
  • cd boot2docker
  • git -c core.autocrlf=false checkout v1.8.1 # หรือเวอร์ชันที่คุณต้องการ
  • แก้ไข rootfs/etc/rc.d/automount-shares
  • เพิ่มtry_mount_share <local_dir> <mount_name>บรรทัดก่อน fi ในตอนท้าย ตัวอย่างเช่น

    try_mount_share /e e
    

    อย่าลืมตั้งค่าเป็นสิ่งที่ระบบปฏิบัติการต้องการเช่น / bin ฯลฯ ...

  • docker build -t boot2docker . # ครั้งแรกจะใช้เวลาประมาณหนึ่งชั่วโมง :(
  • docker run --rm boot2docker > boot2docker.iso
  • สำรองข้อมูล boot2docker.iso เก่าและคัดลอกไฟล์ใหม่ของคุณเข้าที่ใน ~ / .docker / machine / Machines /

มันได้ผลมันยาวและซับซ้อน

นักเทียบท่ารุ่น 1.8.1, นักเทียบท่ารุ่นเครื่อง 0.4.0


สำหรับใครที่มีปัญหากับเรื่องนี้ฉันค่อนข้างแน่ใจว่าฉันต้องทำให้ local path นั้นตรงกับที่อยู่ใน docker-machine นอกจากนี้นักเทียบท่ายังดูเหมือนจะประสบความสำเร็จในการติดตั้งไดรฟ์ข้อมูลในขณะที่นักเทียบท่าทั่วไปไม่ทำ - ไม่แน่ใจว่าทำไม
spieden

3
สร้างสคริปต์สำหรับโซลูชันที่กล่าวถึงที่นี่ ทำงานบนนักเทียบท่ารุ่นล่าสุด 1.10 และนักเทียบท่า 0.6.0 gist.github.com/cristobal/fcb0987871d7e1f7449e
cristobal

แหล่งข้อมูลต่าง ๆ พูดถึงการใช้/mnt/sda1/var/lib/boot2docker/profileคุณอธิบายได้ไหมว่าทำไมคุณถึงเปลี่ยนมาใช้/mnt/sda1/var/lib/boot2docker/bootlocal.sh? นอกจากนี้การโดดเด่นผ่านข้อความจำนวนมากนี้ไม่ได้ช่วยให้คุณอ่านคำตอบได้ ;-)
Forage

1
@Forage Point เกี่ยวกับการจัดรูปแบบของฉัน :) ฉันจำไม่ได้ว่าทำไมฉันถึงแนะนำbootlocal.shวิธีการนี้อีกต่อไป ทั้งหมดที่ฉันพูดได้ก็คือมันดูสะอาดกว่าที่จะใช้คำสั่ง mount เหมือนที่ฉันทำbootlocal.shมากกว่าในโปรไฟล์ นอกจากนี้โดยปกติแล้วฉันเชื่อว่าprofileสามารถรันได้หลายครั้งและการเมานต์จำเป็นต้องเรียกใช้เพียงครั้งเดียวดังนั้นจึงเหมาะสมกว่า แต่ทั้งสองอย่างสามารถทำงานได้
Andy

รักมัน! ขอขอบคุณ!
Qorbani

28

พบปัญหานี้เช่นกันและดูเหมือนว่าวอลุ่มในเครื่องจะไม่ได้รับการต่อเชื่อมเมื่อใช้ Docker-machine วิธีแก้ปัญหาคือการแฮ็ก

  1. รับไดเร็กทอรีการทำงานปัจจุบันของอินสแตนซ์ Docker-machine docker-machine ssh <name> pwd

  2. ใช้เครื่องมือบรรทัดคำสั่งเช่นrsyncคัดลอกโฟลเดอร์ไปยังระบบระยะไกล

    rsync -avzhe ssh --progress <name_of_folder> username@remote_ip:<result _of_pwd_from_1>.
    

pwd เริ่มต้นคือ / root ดังนั้นคำสั่งด้านบนจะเป็น rsync -avzhe ssh --progress <name_of_folder> username@remote_ip:/root

หมายเหตุ: คุณจะต้องระบุรหัสผ่านสำหรับระบบระยะไกล คุณสามารถสร้างได้อย่างรวดเร็วโดย ssh ในระบบระยะไกลและสร้างรหัสผ่าน

  1. เปลี่ยนจุดต่อเชื่อมระดับเสียงในdocker-compose.ymlไฟล์ของคุณจาก.:/appเป็น/root/<name_of_folder>:/app

  2. วิ่ง docker-compose up -d

หมายเหตุเมื่อมีการเปลี่ยนแปลงในพื้นที่อย่าลืมเรียกใช้ใหม่ rsyncเพื่อผลักดันการเปลี่ยนแปลงไปยังระบบระยะไกล

มันไม่สมบูรณ์แบบ แต่ใช้งานได้ ปัญหากำลังดำเนินอยู่ https://github.com/docker/machine/issues/179

โครงการอื่น ๆ ที่พยายามแก้ปัญหานี้ ได้แก่docker-rsync


ต้องติดตั้ง rsync บนระบบรีโมตดูเหมือนว่า `sh: rsync: ไม่พบ rsync: การเชื่อมต่อถูกปิดโดยไม่คาดคิด (0 ไบต์ที่ได้รับจนถึงตอนนี้) ข้อผิดพลาด rsync ของ [ผู้ส่ง]: ไม่พบคำสั่งระยะไกล (รหัส 127) ที่ / SourceCache / rsync / rsync -45 / rsync / io.c (453) [sender = 2.6.9] `คุณทำให้มันทำงานได้อย่างไร?
krinker

1
ต้องติดตั้ง rsync ในระบบท้องถิ่นของคุณ
gbozee

การใช้ขั้นตอนเหล่านี้จะล็อกโฮสต์ดิจิทัลโอเชียนของฉันอย่างสมบูรณ์ .. การถ่ายโอนไฟล์ทำได้ดี แต่เมื่อฉันพยายามเชื่อมต่อกับโฮสต์อีกครั้งด้วย Docker-machine ฉันได้รับexit status 255และต้องสร้างเครื่องใหม่ทั้งหมด
dsifford

1
สร้างสคริปต์สำหรับโซลูชันที่กล่าวถึงที่นี่ ทำงานบนล่าสุดdocker 1.10และdocker-machine 0.6.0 gist.github.com/cristobal/fcb0987871d7e1f7449e
cristobal

@cristobal ดูเหมือนว่าคุณเขียนสคริปต์โซลูชันเมาท์ไม่ใช่โซลูชัน rsync?
Andy

14

ในขณะนี้ฉันไม่เห็นวิธีใดในการเมานต์โวลุ่มบนเครื่องดังนั้นแนวทางในตอนนี้คือการคัดลอกหรือซิงค์ไฟล์ที่คุณต้องการลงในเครื่อง

มีการสนทนาเกี่ยวกับวิธีแก้ปัญหานี้ใน repo github ของเครื่องเทียบท่า มีคนส่งคำขอดึงการใช้งานscpบน docker-machine และได้รวมเข้ากับ master แล้วดังนั้นจึงมีโอกาสมากที่รุ่นถัดไปจะรวมไว้ด้วย

เนื่องจากยังไม่ได้เปิดตัวในตอนนี้ฉันขอแนะนำว่าหากคุณมีโค้ดของคุณโฮสต์บน github เพียงแค่โคลน repo ของคุณก่อนที่จะเรียกใช้แอพ

web:
  build: .
  command: git clone https://github.com/my/repo.git; ./repo/run_web.sh
  volumes:
    - .:/app
  ports:
    - "8000:8000"
  links:
    - db:db
    - rabbitmq:rabbit
    - redis:redis

อัปเดต: หากต้องการเพิ่มเติมฉันพบว่าคุณลักษณะนี้มีอยู่แล้วในไบนารีล่าสุดเมื่อคุณได้รับคุณจะสามารถคัดลอกโครงการในพื้นที่ของคุณที่เรียกใช้คำสั่งเช่นนี้:

docker-machine scp -r . dev:/home/docker/project

เป็นรูปแบบทั่วไป:

docker-machine scp [machine:][path] [machine:][path]

คุณจึงสามารถคัดลอกไฟล์จากไปและกลับระหว่างเครื่องได้

ไชโย! 1


เอกสารประกอบสำหรับdocker
Anthony Dahanne

2
วิธีนี้ช้ามาก :(
Sergej Jevsejev

5

ตั้งแต่เดือนตุลาคม 2017 มีคำสั่งใหม่สำหรับนักเทียบท่าที่ทำเคล็ดลับ แต่ตรวจสอบให้แน่ใจว่าไม่มีสิ่งใดในไดเร็กทอรีก่อนดำเนินการมิฉะนั้นอาจสูญหายได้:

docker-machine mount <machine-name>:<guest-path> <host-path>

ตรวจสอบเอกสารสำหรับข้อมูลเพิ่มเติม: https://docs.docker.com/machine/reference/mount/

ประชาสัมพันธ์กับการเปลี่ยนแปลง: https://github.com/docker/machine/pull/4018


1
ไม่น่าเชื่อจากเอกสาร Docker Machine (ที่คุณเชื่อมโยง) มันเป็นไปไม่ได้ที่จะรู้ว่าคำสั่งในคำสั่งนั้น...:<guest-path> <host-path>(แทนที่จะเป็นวิธีอื่น ๆ ) สิ่งที่ง่ายและสำคัญพอ ๆ กับที่ควรทราบในเอกสาร ... ไม่ใช่!
Dan Nissenbaum

ฉันเดาว่ามันไม่ชัดเจนมากคุณพูดถูก ต้องเดาจากรายการคำสั่ง
Jorge

มันเป็นเคล็ดลับ แต่ในทางอื่น อนุญาตให้ติดตั้ง dir ของเครื่องเทียบท่าบนเครื่องของคุณ น่าเสียดายที่ไม่อนุญาตวิธีอื่น :(
ravenwing

4

หากคุณเลือกตัวเลือก rsync กับ docker-machine คุณสามารถรวมเข้ากับdocker-machine ssh <machinename>คำสั่งดังนี้:

rsync -rvz --rsh='docker-machine ssh <machinename>' --progress <local_directory_to_sync_to> :<host_directory_to_sync_to>

มันใช้รูปแบบคำสั่งของ rsync โดยHOSTเว้นว่างไว้:

rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

( http://linuxcommand.org/man_pages/rsync1.html )


1

ในที่สุดก็หาวิธีอัปเกรด Windows Docker Toolbox เป็น v1.12.5 และทำให้ไดรฟ์ข้อมูลของฉันทำงานได้โดยการเพิ่มโฟลเดอร์ที่ใช้ร่วมกันในOracle VM VirtualBoxตัวจัดการและปิดการใช้งานการแปลงเส้นทาง หากคุณมี Windows 10+ คุณควรใช้ Docker รุ่นใหม่สำหรับ Windows

ความเจ็บปวดในการอัพเกรดครั้งแรก:

  1. ถอนการติดตั้ง VirtualBox ก่อน
    • ใช่นั่นอาจทำให้สิ่งต่างๆในเครื่องมืออื่น ๆ เช่น Android Studio เสียหาย ขอบคุณ Docker :(
  2. ติดตั้ง Docker Toolbox เวอร์ชันใหม่

ตัวอย่างฐานข้อมูล Redis: redis: image: redis:alpine container_name: redis ports: - "6379" volumes: - "/var/db/redis:/data:rw"

ใน Docker Quickstart Terminal ....

  1. รันdocker-machine stop default- ตรวจสอบให้แน่ใจว่า VM ถูกลาก

ใน Oracle VM VirtualBox Manager ...

  1. เพิ่มโฟลเดอร์ที่แชร์ในdefaultVM ผ่านหรือบรรทัดคำสั่ง
    • D:\Projects\MyProject\db => /var/db

ในdocker-compose.yml...

  1. ไดรฟ์ข้อมูล Redis ที่แมปเป็น: "/var/db/redis:/data:rw"

ใน Docker Quickstart Terminal ....

  1. ตั้งค่าCOMPOSE_CONVERT_WINDOWS_PATHS=0(สำหรับรุ่น Toolbox> = 1.9.0)
  2. รันdocker-machine start defaultเพื่อรีสตาร์ท VM
  3. cd D:\Projects\MyProject\
  4. docker-compose up ควรใช้งานได้แล้ว

ตอนนี้สร้างฐานข้อมูล redis ในรูปแบบ D:\Projects\MyProject\db\redis\dump.rdb

เหตุใดจึงควรหลีกเลี่ยงเส้นทางโฮสต์สัมพัทธ์

ฉันหลีกเลี่ยงเส้นทางโฮสต์สัมพัทธ์สำหรับ Windows Toolbox เนื่องจากอาจแนะนำตัวอักษร "\" ที่ไม่ถูกต้อง มันไม่ดีเท่าการใช้เส้นทางที่สัมพันธ์กับdocker-compose.ymlแต่อย่างน้อยนักพัฒนาเพื่อนของฉันก็สามารถทำได้อย่างง่ายดายแม้ว่าโฟลเดอร์โครงการของพวกเขาจะอยู่ที่อื่นโดยไม่ต้องแฮ็กdocker-compose.ymlไฟล์ (ไม่ดีสำหรับ SCM)

ฉบับดั้งเดิม

FYI ... นี่คือข้อผิดพลาดดั้งเดิมที่ฉันได้รับเมื่อฉันใช้เส้นทางสัมพัทธ์ที่ดีสะอาดซึ่งเคยใช้งานได้ดีสำหรับเวอร์ชันเก่า การแมปโวลุ่มของฉันเคยเป็นเพียง"./db/redis:/data:rw"

ERROR: for redis Cannot create container for service redis: Invalid bind mount spec "D:\\Projects\\MyProject\\db\\redis:/data:rw": Invalid volume specification: 'D:\Projects\MyProject\db\redis:/data

นี่แตกด้วยเหตุผลสองประการ ..

  1. ไม่สามารถเข้าถึงD:ไดรฟ์
  2. เส้นทางไดรฟ์ข้อมูลไม่สามารถรวม\อักขระ
    • docker-compose เพิ่มพวกเขาแล้วโทษคุณ !!
    • ใช้COMPOSE_CONVERT_WINDOWS_PATHS=0เพื่อหยุดเรื่องไร้สาระนี้

ฉันขอแนะนำให้จัดทำเอกสารการแมปโฟลเดอร์ที่แชร์ VM เพิ่มเติมในdocker-compose.ymlไฟล์ของคุณเนื่องจากคุณอาจต้องถอนการติดตั้ง VirtualBox อีกครั้งและรีเซ็ตโฟลเดอร์ที่แชร์และเพื่อนร่วมงานของคุณจะรักคุณ


คุณเป็นคนดี
AaronHS

1

คำตอบอื่น ๆ ทั้งหมดนั้นดีในตอนนี้ แต่ตอนนี้ (Docker Toolbox v18.09.3) ทั้งหมดใช้งานได้ทันที คุณเพียงแค่ต้องเพิ่มโฟลเดอร์ที่แชร์ลงใน VirtualBox VM

Docker Toolbox จะเพิ่มC:\Usersเป็นโฟลเดอร์ที่ใช้ร่วมกันโดยอัตโนมัติ/c/Usersภายใต้เครื่อง linux เสมือน (โดยใช้คุณสมบัติโฟลเดอร์ที่ใช้ร่วมกันของ Virtual Box) ดังนั้นหากdocker-compose.ymlไฟล์ของคุณอยู่ที่ใดที่หนึ่งภายใต้เส้นทางนี้และคุณติดตั้งไดเร็กทอรีของเครื่องโฮสต์ภายใต้เส้นทางนี้เท่านั้นทั้งหมดควรทำงานนอกกรอบ

ตัวอย่างเช่น:

C:\Users\username\my-project\docker-compose.yml:

...
  volumes:
    - .:/app
...

.เส้นทางจะถูกแปลงโดยอัตโนมัติไปยังเส้นทางที่แน่นอนแล้วC:\Users\username\my-project /c/Users/username/my-projectและนี่คือวิธีที่เห็นเส้นทางนี้จากมุมมองของเครื่องเสมือน linux (คุณสามารถตรวจสอบได้: docker-machine sshแล้วls /c/Users/username/my-project) ดังนั้นการติดตั้งครั้งสุดท้ายจะเป็น/c/Users/username/my-project:/appดังนั้นในขั้นตอนสุดท้ายจะเป็นภูเขา

ทั้งหมดทำงานอย่างโปร่งใสสำหรับคุณ

แต่จะไม่ได้ผลหากเส้นทางการต่อเชื่อมโฮสต์ของคุณไม่อยู่ภายใต้C:\Usersพา ธ ตัวอย่างเช่นถ้าคุณใส่เดียวกันภายใต้docker-compose.ymlD:\dev\my-project

สิ่งนี้สามารถแก้ไขได้อย่างง่ายดายแม้ว่า

  1. หยุดเครื่องเสมือน ( docker-machine stop)
  2. เปิด Virtual Box GUI เปิดการตั้งค่าของ Virtual Machine ชื่อdefaultเปิดShared Foldersส่วนและเพิ่มโฟลเดอร์ที่แชร์ใหม่:

    • เส้นทางโฟลเดอร์: D:\dev
    • ชื่อโฟลเดอร์: d/dev

    กดOKสองครั้งและปิด Virtual Box GUI

  3. เริ่มเครื่องเสมือน ( docker-machine start)

นั่นคือทั้งหมด ทุกเส้นทางของเครื่องโฮสต์ภายใต้D:\devควรจะทำงานในขณะนี้ในdocker-compose.ymlเมาท์


1

มันอาจจะรวมกันทำแม่มดสามเครื่องมือ: docker-machine mount, rsync,inotifywait

TL; ดร

สคริปต์ตามทั้งหมดด้านล่างอยู่ที่นี่

สมมติว่าคุณมีdocker-compose.ymlและrun_web.shเข้า/home/jdcaballerov/web

  1. ติดตั้งไดเร็กทอรีบนเครื่องซึ่งมีเส้นทางเดียวกับที่คุณมีบนโฮสต์ของคุณdocker-machine machine:/home/jdcaballerov/web /tmp/some_random_dir
  2. ซิงโครไนซ์ไดเร็กทอรีที่ติดตั้งกับ dir บนโฮสต์ของคุณ rsync -r /home/jdcaballerov/web /tmp/some_random_dir
  3. ซิงโครไนซ์ทุกการเปลี่ยนแปลงของไฟล์ในไดเร็กทอรีของคุณ:

    inotifywait -r -m -e close_write --format '%w%f' /home/jdcaballerov/web | while read CHANGED_FILE
    do
        rsync /home/jdcaballerov/web /tmp/some_random_dir
    done
    

ระวัง - มีสองไดเรกทอรีที่มีเส้นทางเดียวกัน - หนึ่งอยู่ในเครื่อง (โฮสต์) ในพื้นที่ของคุณที่สองอยู่ในเครื่องเทียบท่า


0

ฉันถือว่าrun_web.shไฟล์อยู่ในไดเร็กทอรีเดียวกับdocker-compose.ymlไฟล์ของคุณ command: /app/run_web.shแล้วคำสั่งที่ควรจะเป็น

เว้นแต่Dockerfile(ที่คุณไม่ได้เปิดเผย) จะดูแลการใส่run_web.shไฟล์ลงในอิมเมจ Docker


ขอบคุณสำหรับคำตอบ. อยู่ในไดเร็กทอรีเดียวกัน อย่างไรก็ตามฉันสังเกตเห็นว่าไม่มีการต่อระดับเสียง ไฟล์ไม่พร้อมใช้งานนั่นคือคำถาม วิธีการเพิ่ม โครงสร้างคล้ายsyncano.com/…
jdcaballerov

ตรวจสอบให้แน่ใจว่าคุณมีเวอร์ชันล่าสุดของทั้งนักเทียบท่าและนักแต่งเพลงดิ๊กเกอร์
Thomasleveil

นักเทียบท่า: นักเทียบท่ารุ่น 1.6.0, สร้าง 4749651, นักเทียบท่า - เครื่องเวอร์ชัน 0.2.0 (8b9eaf2), นักเทียบท่าเขียน 1.2.0
jdcaballerov

คุณได้แก้ไข Dockerfile จากsyncano.com/…ด้วยวิธีใดหรือไม่?
Thomasleveil

1
ใช่ฉันเพิ่มรหัสสร้างไดเร็กทอรี ปัญหาคือเมื่อนักเทียบท่าเขียนดำเนินการจะเขียนทับไดรฟ์ข้อมูล: ไดรฟ์ข้อมูล: -.: / app และออกจากไดเร็กทอรีว่าง ฉันแสดงความคิดเห็นเป็นจำนวนมากในการเขียนและใช้งานได้
jdcaballerov

0

หลังจากสรุปโพสต์ที่นี่สคริปต์ที่อัปเดตที่แนบมาเพื่อสร้างจุดเชื่อมต่อโฮสต์เพิ่มเติมและติดตั้งอัตโนมัติเมื่อ Virtualbox รีสตาร์ท สภาพแวดล้อมการทำงานโดยย่อดังต่อไปนี้: - Windows 7 - docker-machine.exe เวอร์ชัน 0.7.0 - VirtualBox 5.0.22

    #!env bash

    : ${NAME:=default}
    : ${SHARE:=c/Proj}
    : ${MOUNT:=/c/Proj}
    : ${VBOXMGR:=C:\Program Files\Oracle\VirtualBox\VBoxManage.exe}
    SCRIPT=/mnt/sda1/var/lib/boot2docker/bootlocal.sh

    ## set -x
    docker-machine stop $NAME
    "$VBOXMGR" sharedfolder add $NAME --name c/Proj --hostpath 'c:\' --automount 2>/dev/null || :
    docker-machine start $NAME
    docker-machine env $NAME

    docker-machine ssh $NAME 'echo "mkdir -p $MOUNT" | sudo tee $SCRIPT'
    docker-machine ssh $NAME 'echo "sudo mount -t vboxsf -o rw,user $SHARE $MOUNT" |  sudo tee -a $SCRIPT'
    docker-machine ssh $NAME 'sudo chmod +x /mnt/sda1/var/lib/boot2docker/bootlocal.sh'
    docker-machine ssh $NAME 'sudo /mnt/sda1/var/lib/boot2docker/bootlocal.sh'
    #docker-machine ssh $NAME 'ls $MOUNT'

0

ฉันใช้ Docker-machine 0.12.2 กับไดรฟ์ virtualbox บนเครื่องท้องถิ่นของฉัน ฉันพบว่ามีไดเร็กทอรี/hosthome/$(user name)ที่คุณสามารถเข้าถึงไฟล์ในเครื่องได้


0

แค่คิดว่าฉันจะพูดถึงฉันใช้ 18.03.1-ce-win65 (17513) บน Windows 10 และฉันสังเกตเห็นว่าหากคุณเคยแชร์ไดรฟ์และแคชข้อมูลรับรองไว้ก่อนหน้านี้เมื่อคุณเปลี่ยนรหัสผ่าน Docker จะเริ่มมี ไดรฟ์ข้อมูลที่ติดตั้งภายในคอนเทนเนอร์ว่างเปล่า

ไม่มีข้อบ่งชี้ว่าสิ่งที่เกิดขึ้นจริงคือตอนนี้ไม่สามารถเข้าถึงที่แชร์ด้วยข้อมูลรับรองแคชเก่า วิธีแก้ปัญหาในสถานการณ์นี้คือการรีเซ็ตข้อมูลรับรองผ่านทาง UI (การตั้งค่า -> ไดรฟ์ที่แชร์) หรือปิดใช้งานการแชร์ไดรฟ์ที่เปลี่ยนใหม่ได้และป้อนรหัสผ่านใหม่

มันจะมีประโยชน์ถ้านักเทียบท่าเขียนให้เกิดข้อผิดพลาดในสถานการณ์เหล่านี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.