เดิมทีคอนเทนเนอร์นักเทียบท่าของฉันสามารถเข้าถึงอินเทอร์เน็ตภายนอกได้ (นี่คือบริการนักเทียบท่า / คอนเทนเนอร์ที่ทำงานบน Amazon EC2)
เนื่องจากแอปของฉันเป็น API ฉันจึงติดตามการสร้างคอนเทนเนอร์ของฉัน (มันประสบความสำเร็จในการดึงแพ็คเกจทั้งหมดที่จำเป็น) ด้วยการอัปเดตตาราง IP ของฉันเพื่อกำหนดเส้นทางการรับส่งข้อมูลทั้งหมดจากพอร์ต 80 ไปยังพอร์ตที่ API ของฉัน (ทำงานบนนักเทียบท่า) ฟัง
หลังจากนั้นเมื่อฉันพยายามสร้างคอนเทนเนอร์ใหม่มันล้มเหลว หลังจากต่อสู้กันมามากฉันพบว่าขั้นตอนก่อนหน้าของฉัน (การตั้งค่ากฎการส่งต่อพอร์ต IPTable) ทำให้ความสามารถในการเชื่อมต่อเครือข่ายภายนอกของนักเทียบท่ายุ่ง
วิธีแก้ไข: หยุดบริการ IPTable ของคุณ:
sudo service iptables stop
รีสตาร์ท Docker Daemon:
sudo service docker restart
จากนั้นลองสร้างคอนเทนเนอร์ของคุณใหม่ หวังว่านี่จะช่วยได้
ติดตาม
ฉันมองข้ามไปโดยสิ้นเชิงว่าฉันไม่จำเป็นต้องยุ่งกับตาราง IP เพื่อส่งต่อการรับส่งข้อมูลขาเข้าไปยัง 80 ไปยังพอร์ตที่ API ทำงานบนนักเทียบท่าทำงานอยู่ แต่ฉันเปลี่ยนชื่อพอร์ต 80 เป็นพอร์ตที่ API ในนักเทียบท่าทำงานบน:
docker run -d -p 80:<api_port> <image>:<tag> <command to start api>
sysctl -w net.ipv4.ip_forward=1
(บน Centos 6)