Score:2

เรียกใช้ dockerd เป็นพื้นหลังบน WSL Ubuntu

ธง us

ฉันได้ติดตั้ง Docker เป็น WSL Ubuntu 20.04 distr. เพื่อให้มันทำงานฉันต้องการ:

sudo นักเทียบท่า

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

ป้อนคำอธิบายรูปภาพที่นี่

ฉันจะเรียกใช้นักเทียบท่าในพื้นหลังและเปลี่ยนไดเร็กทอรีโดยไม่หยุดได้อย่างไร

muru avatar
us flag
ทำไมไม่ใช้ [เดสก์ท็อป Docker ที่มีแบ็กเอนด์ WSL](https://docs.docker.com/desktop/windows/wsl/)
Roman Marusyk avatar
us flag
@muru เนื่องจาก Docker สำหรับเดสก์ท็อปเปลี่ยนใบอนุญาตและจะไม่ฟรีอีกต่อไป ฉันพยายามหาวิธีอื่น: https://jason-umiker.medium.com/replacecing-docker-desktop-with-wsl2-and-or-rancher-desktop-on-windows-5e036f9dc3a4
muru avatar
us flag
จะยังคงฟรี (เช่นเดียวกับเบียร์) สำหรับการใช้งานส่วนตัว
Roman Marusyk avatar
us flag
@muru ใช่ฉันรู้ แต่ฉันจะไม่ใช้เพื่อส่วนตัว
Score:2
ธง in

วิธีเดียวที่ฉันเห็นผู้คนทำเช่นนี้คือการเรียกใช้ Docker ใน VM (ซึ่งดูเหมือนจะไม่ใช่ตัวเลือกที่คุณกำลังพิจารณา) หรือเรียกใช้สคริปต์ที่ดำเนินการเมื่อ WSL เริ่มทำงาน

ต่อไปนี้คือวิธีที่คุณสามารถเรียกใช้ Docker เมื่อ WSL เริ่มทำงาน:

  1. แก้ไขของคุณ ซูโดเออร์ ไฟล์เพื่อให้บัญชีผู้ใช้ของคุณเริ่ม Docker โดยไม่ต้องใส่รหัสผ่าน:
    ซูโด วิซูโด 
    
    เพิ่มบรรทัดนี้:
    rmarusyk ALL=(ALL) NOPASSWD: /usr/bin/dockerd
    
    บันทึก: อย่าลืมเปลี่ยน มารูซิก ไปยังบัญชีผู้ใช้ที่คุณต้องการให้ Docker ทำงานหากไม่ใช่ชื่อเดียวกับในภาพหน้าจอของคุณ
  2. แก้ไขของคุณ ~/.bashrc ไฟล์เพื่อตรวจสอบว่า Docker กำลังทำงานอยู่หรือไม่ หากไม่ใช่ ให้เริ่มการทำงาน:
    # เริ่มนักเทียบท่า (หากยังไม่ได้ใช้งาน)
    RUNNING=`ps aux | grep นักเทียบท่า | grep -v grep`
    ถ้า [ -z "$RUNNING" ]; แล้ว
        sudo dockerd > /dev/null 2>&1 &
        ปฏิเสธ
    ไฟ
    
    บันทึก: สามารถเพิ่มได้เกือบทุกที่ แต่โดยทั่วไปจะ "สะอาดกว่า" ที่จะมีไว้ที่ส่วนท้ายของไฟล์ เพื่อให้มีการกำหนดค่า/โหลด/อื่นๆ ที่จำเป็นก่อนเวลา
  3. (ไม่บังคับ) หากคุณต้องการเรียกใช้คำสั่ง Docker โดยไม่จำเป็นต้องขึ้นต้นด้วย ซูโดคุณสามารถเพิ่มบัญชีผู้ใช้ของคุณไปยัง นักเทียบท่า กลุ่ม:
    sudo usermod -a -G นักเทียบท่า $USER
    
  4. ทดสอบการทำงานโดยการปิดเทอร์มินัล เริ่มต้นใหม่อีกครั้ง และตรวจสอบสถานะของ Docker:
    นักเทียบท่า PS 
    
    บันทึก: ใช้คำสั่ง Docker อะไรก็ได้

สิ่งนี้ควรทำสิ่งที่คุณต้องการ

Roman Marusyk avatar
us flag
ขอบคุณมาก. มันได้ผล!
Score:2
ธง vn

วิธีมาตรฐานในการรัน Docker Engine daemon (ไม่มี Docker Desktop) ภายใต้ WSL Ubuntu นั้นง่ายๆ:

sudo บริการนักเทียบท่าเริ่มต้น

สิ่งนี้จัดการ daemonization ของมันพร้อมกับงานอื่น ๆ อีกมากมาย คุณสามารถดูสคริปต์ฉบับเต็มได้โดยการตรวจสอบ /etc/init.d/docker. เรียกใช้สิ่งนี้แทนการพยายามทำซ้ำกระบวนการเริ่มต้นด้วยตนเอง

หากคุณต้องการให้เริ่มต้นโดยอัตโนมัติ มีหลายตัวเลือก:

  • คุณได้เห็นคำตอบอื่นเพื่อแก้ไขสคริปต์เริ่มต้นของคุณแล้ว โดยส่วนตัวแล้วฉันไม่ใช่แฟนตัวยงของวิธีนี้ อันดับแรก ฉันต้องการทำให้สคริปต์เริ่มต้นทำงานแบบลีนมากที่สุดเท่าที่จะเป็นไปได้เพื่อประสิทธิภาพที่ดีที่สุด ประการที่สอง การปรับเปลี่ยนเช่นนี้มักจะ "สะสม" เมื่อเวลาผ่านไป ทำให้การแก้ไขปัญหาเชลล์ของคุณยากขึ้นในอนาคต ที่กล่าวว่าไม่ใช่ตัวเลือกที่น่ากลัวสำหรับ WSL อย่างน้อยก็ใน Windows 10

    อย่างไรก็ตาม หากคุณต้องการไปเส้นทางนี้จริงๆ ยังมีวิธีที่ง่ายกว่าคำตอบอื่นๆ เพียงเพิ่มบรรทัดต่อไปนี้ของคุณ ~/.bash_profile (เนื่องจากดูเหมือนว่าคุณกำลังใช้ Bash):

    wsl.exe -u root -e sh -c "สถานะนักเทียบท่าบริการ > /dev/null || บริการนักเทียบท่าเริ่มต้น"
    

    นั่นคือทั้งหมด คุณไม่จำเป็นต้องทำการปรับเปลี่ยนของคุณ ซูโดเออร์ เนื่องจาก wsl.exe -u รูท ดำเนินการเซสชันในฐานะผู้ใช้รูทโดยไม่ต้องใช้รหัสผ่าน

    แต่ใช้ของคุณแน่นอน ~/.bash_profile สำหรับสิ่งนี้ไม่ใช่ ~/.bashrc. อดีตจะดำเนินการเฉพาะสำหรับ เข้าสู่ระบบ เชลล์ แต่ภายหลังจะถูกเรียกใช้งานสำหรับเชลล์แบบโต้ตอบทั้งหมด โดยเพิ่มโอเวอร์เฮดเพิ่มเติม

  • Windows 11 ทำให้ง่ายขึ้น (หากคุณสามารถอัปเกรดได้) ด้วยการกำหนดค่าพิเศษสำหรับบริการที่คุณต้องการเรียกใช้เมื่อเริ่มต้นอินสแตนซ์ WSL แค่ sudo vi /etc/wsl.conf โดยมีเนื้อหาดังนี้

    [บูต]
    คำสั่ง = "บริการนักเทียบท่าเริ่มต้น"
    

    สิ่งนี้จะทำงานเพียงครั้งเดียวเมื่อ Ubuntu เริ่มทำงาน หากอินสแตนซ์ถูกปิดด้วย wsl --terminate Ubuntu หรือ wsl -- ปิดเครื่องมันจะทำงานอีกครั้งในครั้งต่อไปที่คุณเริ่ม Ubuntu

    คำสั่งเหล่านี้ทำงานในฐานะ root โดยไม่จำเป็นต้องใส่รหัสผ่าน

  • หากคุณต้องการเริ่ม Docker Engine ทุกครั้งที่คุณเข้าสู่ระบบ Windows ให้สร้าง "Scheduled Task" ใน Windows ซึ่งทำงานบน Logon และชี้ไปที่ wsl.exe โดยมีข้อโต้แย้งคือ -u root -e sh -c "สถานะนักเทียบท่าบริการ || บริการนักเทียบท่าเริ่มต้น"

Roman Marusyk avatar
us flag
เป็นทางออกที่ดีที่สุด ขอขอบคุณ. ขออภัยที่ไม่สามารถตรวจสอบได้ตั้งแต่เนิ่นๆ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา