ฉันมีเว็บเซิร์ฟเวอร์ที่ใช้ Python อย่างง่ายซึ่งทำงานในคอนเทนเนอร์ที่ตั้งค่าด้วยการเขียนนักเทียบท่าที่เปิดเผยพอร์ต 8080
เมื่อฉันสร้างบริการนักเทียบท่าจะรายงานว่าพอร์ตถูกเปิดเผย แต่พอร์ตไม่ได้ถูกเปิดเผยจากภายนอก
ฉันควรดูอะไรในการวินิจฉัยต่อไป
นี่คือการวิ่งทั่วไป
â demo04 sudo docker-เขียนขึ้น -d
กำลังสร้าง leagueweb_database ใหม่ ... เสร็จแล้ว
กำลังสร้าง leagueweb_server อีกครั้ง ... เสร็จแล้ว
เว็บเซิร์ฟเวอร์ Python (โดยใช้ CherryPy) รายงานว่าได้เริ่มทำงานแล้วและเปิดพอร์ต 8080
leagueweb_server | [25/Jan/2022:11:27:21] ENGINE ให้บริการบน http://127.0.0.1:8080
นักเทียบท่ารายงานว่ากำลังส่งต่อพอร์ต 8080
â demo04 sudo นักเทียบท่า-เขียน ps
ชื่อ Command State Ports
--------------------------------------------- --------------------------------------------- --------------------
leagueweb_database /entrypoint.sh mysqld ขึ้น (ปกติ) 0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
leagueweb_server ./wait-for-it.sh ฐานข้อมูล: ... เพิ่มขึ้น 0.0.0.0:8080->8080/tcp,:::8080->8080/tcp
การทดสอบสิ่งนี้จากพีซีระยะไกลฉันเห็นว่าแม้ว่าพอร์ต 3306 จะเปิดอยู่ภายนอก แต่พอร์ต 8080 นั้นไม่ได้เปิดอยู่
PS C:> ทดสอบ-NetConnection 192.168.1.132 -Port 3306
ที่อยู่ระยะไกล : 192.168.1.132
พอร์ตระยะไกล: 3306
TcpTest สำเร็จ : จริง
PS C:> ทดสอบ NetConnection 192.168.1.132 -Port 8080
คำเตือน: TCP เชื่อมต่อกับ (192.168.1.132 : 8080) ล้มเหลว
ไฟร์วอลล์ถูกปิด
â demo04 สถานะ sudo ufw
สถานะ: ไม่ได้ใช้งาน
นี่คือไฟล์เขียนนักเทียบท่า
รุ่น: '3'
บริการ:
เว็บลีก:
# ติดตั้ง Python และไลบรารีที่จำเป็นด้วย Dockerfile
สร้าง:
บริบท: .
ไฟล์นักเทียบท่า: leagueweb.dockerfile
รีสตาร์ท: เว้นแต่จะหยุด
ชื่อคอนเทนเนอร์: leagueweb_server
# อย่าเริ่มต้นจนกว่าฐานข้อมูลจะเริ่มต้น
ขึ้นอยู่กับ:
- ฐานข้อมูล
# เปิดเผยพอร์ต HTTP
พอร์ต:
- "8080:8080"
# ติดตั้งรหัสและทรัพยากรของเว็บลีก
ปริมาณ:
- "/home/testuser/demo04/code:/leagueweb"
# เริ่มเซิร์ฟเวอร์เมื่อฐานข้อมูลทำงานเท่านั้น
คำสั่ง: ["./wait-for-it.sh", "database:3306", "--", "python", "-u", "/leagueweb/leagueweb.py"]
ฐานข้อมูล:
# ใช้ MySQL 5.7 เป็นฐานข้อมูล
รูปภาพ: mysql/mysql-server:5.7
รีสตาร์ท: เว้นแต่จะหยุด
ชื่อคอนเทนเนอร์: leagueweb_database
# ตั้งค่าตัวแปรสภาพแวดล้อมเพื่อตั้งค่าฐานข้อมูลเริ่มต้น
สิ่งแวดล้อม:
- "MYSQL_ROOT_PASSWORD=รูท"
- "MYSQL_USER=ลีกเว็บ"
- "MYSQL_PASSWORD=*******"
- "MYSQL_DATABASE=leagueweb01"
# ยกเลิกการแสดงความคิดเห็นเพื่อเปิดเผยฐานข้อมูล MySQL ภายนอกบนพอร์ต 3306 สำหรับ
#ทดสอบ
พอร์ต:
- "3306:3306"
# เมานต์ไฟล์ init.sql เพื่อเรียกใช้และสร้างตารางให้เราโดยอัตโนมัติ
# ทุกอย่างในโฟลเดอร์ docker-entrypoint-initdb.d ถูกดำเนินการเป็น
#ทันทีที่คอนเทนเนอร์เปิดและทำงาน
ปริมาณ:
- "/home/testuser/demo04/db:/docker-entrypoint-initdb.d"