การแก้ไขปัญหา Docker Desktop for Windows Error response from daemon: driver failed programming external connectivity on endpoint : Error starting userland proxy: input/output error






หลังจากที่ผมทดลองหัดใช้งาน Docker Desktop บน Windows10 ก็พบปัญหาแปลกๆหลังจากที่ใช้งานไปได้สักพัก โดยปัญหาที่พบมีดังนี้

อาการ Error :

ผมพบ Error แปลกๆนี้เมื่อผมสั่ง Run Image ด้วยคำสั่ง

> docker run --name TEST-01  -p 8082:80 -d mtec_project:0.1 
#อธิบาย ผม Run Image และตั้งชื่อว่า TEST-01 ใช้ Port ภายนอก 8082 และ Port ภายใน 80 จาก Image ชื่อ mtec_project tag 0.1

ขึ้น Error ดังภาพประกอบที่ 1 ว่า
Error response from daemon: driver failed programming external connectivity on endpoint TEST-01 (46347c03371bedf1c8aedfb0e181c7eb6be81c57be552ee21870eca6bf0208de): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:8082:tcp:172.17.0.2:80: input/output error.

 ภาพประกอบที่ 1 : Error เมื่อผมพยายามสั่ง docker run เพื่อ Run image และขอใช้ port 8082 ขึ้น Error ว่า  Error response from daemon: driver failed programming external connectivity on endpoint TEST-01 (46347c03371bedf1c8aedfb0e181c7eb6be81c57be552ee21870eca6bf0208de): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:8082:tcp:172.17.0.2:80: input/output error.
ภาพประกอบที่ 1 : Error เมื่อผมพยายามสั่ง docker run เพื่อ Run image และขอใช้ port 8082

ความรู้สึกผมคือเหมือนกับว่า Image ถูกสั่ง Run ขึ้นมาแล้วแต่ดูเหมือน Container จะยังไม่ทำงาน ผมจึงสั่งสตาร์ท Container ด้วยคำสั่ง 

> docker start TEST-01
#อธิบาย สั่ง Start Container ชื่อว่า TEST-01

ก็ยังพบว่าขึ้น Error เช่นเดิมดังภาพประกอบที่ 2
ภาพประกอบที่ 2 : เมื่อสั่ง docker Start TEST-01 เพื่อ Run Container ยังคงพบ Error :  Error response from daemon: driver failed programming external connectivity on endpoint TEST-01 (46347c03371bedf1c8aedfb0e181c7eb6be81c57be552ee21870eca6bf0208de): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:8082:tcp:172.17.0.2:80: input/output error. เช่นเดิม
ภาพประกอบที่ 2 : เมื่อสั่ง docker Start TEST-01 เพื่อ Run Container ยังคงพบ Error เช่นเดิม

เมื่อผมใช้คำสั่ง docker ps -a เพื่อ ดูสถานะของ Container ทั้งหมด พบว่า Container : TEST-01 ถูกสร้างแล้ว (Created) แต่ไม่เปลี่ยนเป็นสถานะ Up และไม่มีการใช้งาน Port

ภาพประกอบที่ 3 : จะเห็นว่าสถาะของ Container เป็น Created (ไม่ใช่ Up) และไม่มีการใช้งาน Port

การแก้ไข

ผมเข้าไปพบวิธีแก้ไขใน https://github.com/docker/for-win/issues/3338
จากคำตอบของคุณ pfuntner ดังภาพประกอบที่ 4 กล่าวว่า "I was experiencing this with Docker Desktop 2.0.0.3. Restarting Desktop and removing the old containers seemed to resolve the problem."

ภาพประกอบที่ 4

หมายความว่าเราต้องทำ 2 ขั้นตอนดังนี้
  1. ลบ Containers เก่าออกทั้งหมดเนื่องจาก Container ทั้งหมดที่มีบนเครื่องผมเป็นเพียงการทดสอบ ผมจึงลบ Container ทั้งหมดได้ทันที แต่หากใครใช้บนเครื่อง Production ก็ต้องระวังหน่อยนะครับ
    docker stop $(docker ps -a -q) # อธิบาย -> ใช้คำสั่งนี้เพื่อหยุดการทำงานของ Container ทั้งหมด(ใน Docker ถ้า Container ยังไม่หยุดการทำงานจะไม่สามารถลบได้
    docker rm $(docker ps -a -q)  # อธิบาย -> ใช้คำสั่งนี้เพื่อลบ Container ทั้งหมด

  2. สั่ง ทำการ Restart เริ่มการทำงานของ Docker Desktop ใหม่ 
    โดยคลิ้กที่ตัวปลาวาฬที่เป็นสัญลักษณ์ Docker บน Taskbar ดังภาพประกอบที่ 5

ขั้นตอนการ Restart Docker Desktop คลิ้กที่ตัวปลาวาฬที่เป็นสัญลักษณ์ Docker จากนั้นเลือก Restart
ภาพประกอบที่ 5 ขั้นตอนการ Restart Docker Desktop คลิ้กที่ตัวปลาวาฬที่เป็นสัญลักษณ์ Docker จากนั้นเลือก Restart

ทดสอบการแก้ไขปัญหา

หลังจากดำเนินการตามขั้นตอนการแก้ไขปัญหาแล้ว ใช้คำสั่ง
> docker run --name TEST-01  -p 8082:80 -d mtec_project:0.1 เพื่อ Run Image อีกครั้ง

จากนั้นใช้คำสั่ง
> docker ps เพื่อดูสถานะการทำงานของ Container อีกครั้ง

จะพบว่า Container ถูกเรียกขึ้นมาใช้งานโดยมีสถานะเป็น Up และมีการเรียกใช้งาน Port ตามที่เราต้องการแล้ว ดังภาพประกอบที่ 6
ภาพประกอบที่ 6 หลังจากที่เราแก้ปัญหาแล้วสั่ง docker run เพื่อ Run Imageและ docker ps เพื่อดูสถานะของ Container อีกครั้งจะพบว่า Status ถูกเปลี่ยนเป็น Up และ Port 8082 ถูกเรียกใช้งานแล้ว

เนื่องจาก Container นี้ของผมเป็นตั้งค่าเป็น PHP Server โดยการ Run Apache ก็จะสามารถทดสอบบน Web Browser ได้โดยคำสั่ง localhost:8082 ดังภาพประกอบที่ 7

ภาพประกอบที่ 7

สรุป

จากการที่ผมลองฝึกหัดใช้งาน Docker บน Docker Desktop for Windows 10 ก็จะพบปัญหาแปลกๆบ่อยพอสมควร หากคราวหน้ามีปัญหาแปลกๆและแก้ไขได้ก็จะนำมาแชร์วิธีการแก้ไขให้ทราบกันอีกครั้งครับ


ความคิดเห็น