Go Modules, ที่เก็บ Git ส่วนตัว และ Dockerfiles
คุณมีปัญหาในการอ้างถึงที่เก็บ Git ส่วนตัวใน Dockerfiles ของคุณหรือไม่? ในบล็อกโพสต์นี้ ฉันจะอธิบายสาเหตุของปัญหาและนำเสนอวิธีแก้ไขปัญหาง่ายๆ
Go แก้ไขโมดูลอย่างไร
เมื่อสร้างแอปพลิเคชัน Go จะแก้ไขโมดูลโดยตรวจสอบ:
- ขั้นแรก หากโมดูลอยู่ในแคชโมดูลภายในเครื่อง
- หากไม่มี จะดาวน์โหลดโมดูลจากพร็อกซีเซิร์ฟเวอร์ Go ซึ่งเป็นแคชส่วนกลางสำหรับโมดูล Go ซึ่งช่วยให้สร้างได้รวดเร็วและมีประสิทธิภาพมากขึ้น หากพบโมดูล Go จะจัดเก็บไว้ในแคชของโมดูลในเครื่อง
- หากไม่มีโมดูลอยู่ในพร็อกซี โมดูลนั้นจะถูกดาวน์โหลดและพร้อมใช้งานสำหรับคำขอที่ตามมา
โมดูลในที่เก็บ Git ส่วนตัวจะไม่ให้บริการโดยพร็อกซีเซิร์ฟเวอร์ Go ไม่สามารถดาวน์โหลดโมดูลได้เนื่องจากไม่มีข้อมูลรับรองที่จำเป็น
ในกรณีนั้น Go จะพยายามดาวน์โหลดโมดูลโดยตรงโดยการโคลนที่เก็บ Git ส่วนตัว จะใช้ข้อมูลรับรอง git ที่กำหนดค่าไว้ในเครื่องของคุณเพื่อดำเนินการดังกล่าว
ก่อนที่จะพยายามรับโมดูลจากที่เก็บ git Go จะพยายามใช้พร็อกซี เพื่อป้องกันสิ่งนี้ คุณสามารถตั้งGOPRIVATEค่าตัวแปรสภาพแวดล้อมเพื่อบอกให้ Go ปฏิบัติต่อโมดูลใดๆ ภายใต้โดเมนเฉพาะเป็นส่วนตัว ตัวอย่างเช่น:
go env -w "GOPRIVATE=github.com/neha-viswanathan/*"
แล้ว Dockerfiles ล่ะ?
ในการสร้างไบนารี Go ของคุณที่เกี่ยวข้องกับโมดูล Git ส่วนตัวด้วย Docker ให้สำเร็จ คุณจะต้องระบุข้อมูลรับรอง Git ให้กับบริบทการสร้าง Docker ของคุณ วิธีดำเนินการคือส่งข้อมูลรับรองเหล่านี้เป็นอาร์กิวเมนต์สำหรับสร้างไปยัง Docker
ตัวอย่างเช่น หากคุณใช้ GitHub คุณสามารถให้ Personal Access Token เป็นข้อมูลประจำตัวแก่ Docker ได้ดังนี้:
# the build argument to pass the credentials
ARG GITHUB_TOKEN
# git is needed to download private go modules directly from git repositories
RUN apk add git
# configure git with PAT to access the private repositories
RUN git config --global --add url."@github.com/neha-viswanathan/">https://${GITHUB_TOKEN}@github.com/neha-viswanathan/".insteadOf "https://github.com/neha-viswanathan/"
- คำ
git configสั่งเขียน URL ใหม่โดยเพิ่มข้อมูลรับรองที่จำเป็น
export GITHUB_TOKEN="my personal access"
docker build --build-arg GITHUB_TOKEN=${GITHUB_TOKEN} --no-cache -t image-name:tag .





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)