ทำไม Testcontainers withEnv จึงไม่พร็อกซีการดึงอิมเมจ
กำหนดค่า Docker daemon สำหรับการดึงที่ล้มเหลว; ตัวแปรพร็อกซีของคอนเทนเนอร์จะไปถึงโปรแกรมหลังสร้างคอนเทนเนอร์แล้วเท่านั้น
หาก Testcontainers ล้มเหลวระหว่างดึงอิมเมจ การตั้งค่า withEnv ของคอนเทนเนอร์ที่จะเกิดใหม่ช่วยไม่ได้ เพราะ Docker daemon เป็นผู้ดาวน์โหลดจากรีจิสทรีก่อนที่คอนเทนเนอร์จะมีอยู่
| การทำงานที่ล้มเหลว | การกำหนดค่าพร็อกซีที่ต้องตรวจ |
|---|---|
| การดึงอิมเมจ | Docker daemon ที่การทดสอบใช้ และเส้นทางไปยังรีจิสทรี |
| การดาวน์โหลดภายในคอนเทนเนอร์ที่กำลังทำงาน | อินพุตที่แอปพลิเคชันรองรับในคอนเทนเนอร์นั้น |
| การทดสอบ Java เชื่อมต่อกับ Docker หรือแอปพลิเคชัน | ไคลเอนต์ฝั่ง Java ที่สร้างการเชื่อมต่อนั้น |
สำหรับกรณีที่สอง ให้เพิ่มตัวแปรสภาพแวดล้อมในนิยาม GenericContainer ที่มีอยู่:
container
.withEnv("http_proxy", "http://proxy.example:8080")
.withEnv("https_proxy", "http://proxy.example:8080");หากการดาวน์โหลดภายในคอนเทนเนอร์ได้รับอนุญาตให้ใช้ปลายทาง HTTP สาธารณะ ให้กรอกค่าเหล่านั้นจาก รายการพร็อกซี HTTP โปรแกรมในอิมเมจต้องอ่านตัวแปรเหล่านั้น ตัวแปรเหล่านี้ไม่ได้เปลี่ยนซ็อกเก็ตฐานข้อมูลใด ๆ ให้เป็นทราฟฟิกพร็อกซี HTTP ปลายทางต้องเข้าถึงได้จากคอนเทนเนอร์ด้วย: 127.0.0.1 ของมันชี้ไปที่ตัวมันเอง
สำหรับกรณีแรก ให้ค้นหาสภาพแวดล้อม Docker ที่ Testcontainers ใช้จริง ๆ daemon ระยะไกลหรือ Docker Desktop อาจดึงการกำหนดค่าจากแหล่งอื่นที่ไม่ใช่ dockerd ภายในเครื่อง เมื่อเพิ่มพร็อกซีเริ่มต้นแบบกว้าง ให้คงบริการทดสอบภายในเครื่องและ Docker API ไว้บนเส้นทางที่ตั้งใจไว้