วิธีมาตรฐานในการรัน 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 "สถานะนักเทียบท่าบริการ || บริการนักเทียบท่าเริ่มต้น"