บริบท
ฉันกำลังใช้งานอินสแตนซ์ GitLab ของตัวเองกับเซิร์ฟเวอร์เพิ่มเติมสำหรับ CI ในกรณีที่โฮสต์ของฉันสำหรับนักวิ่ง gitlab มี CentOS 8 และนักวิ่ง gitlab เป็นเวอร์ชัน 14.4.0 และอินสแตนซ์ gitlab กำลังทำงาน 14.4.1 ขณะนี้ฉันใช้ตัวดำเนินการเชลล์บนเซิร์ฟเวอร์ CI แต่ต้องการเปลี่ยนไปใช้ตัวดำเนินการนักเทียบท่า
กำหนดค่า Gitlab Runner
ของฉัน /etc/gitlab-runner/config.toml
มีลักษณะดังนี้:
พร้อมกัน = 1
check_interval = 0
[เซสชัน_เซิร์ฟเวอร์]
session_timeout = 1800
[[นักวิ่ง]]
ชื่อ = "ตัวดำเนินการเชลล์เก่า"
url = "https://XXXXXXXXXXXXXXXXXXXXXXXX/"
โทเค็น = "XXXXXXXXXXXXXXXXXXXXX"
ผู้บริหาร = "เปลือก"
[นักวิ่ง.custom_build_dir]
[รันเนอร์แคช]
[รันเนอร์.แคช.s3]
[runner.cache.gcs]
[runners.cache.azure]
[[นักวิ่ง]]
ชื่อ = "ตัวดำเนินการนักเทียบท่าใหม่"
url = "https://XXXXXXXXXXXXXXXXXXXXXXXX/"
โทเค็น = "XXXXXXXXXXXXXXXXXXXXX"
ผู้บริหาร = "นักเทียบท่า"
[นักวิ่ง.custom_build_dir]
[รันเนอร์แคช]
[รันเนอร์.แคช.s3]
[runner.cache.gcs]
[runners.cache.azure]
[นักวิ่ง.นักเทียบท่า]
tls_verify = เท็จ
ภาพ = "docker.io/centos:7"
สิทธิพิเศษ = เท็จ
ปิดการใช้งาน_entrypoint_overwrite=เท็จ
oom_kill_disable = เท็จ
ปิดการใช้งานแคช = เท็จ
ปริมาณ = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
network_mode = "โฮสต์"
shm_size = 0
ตัวดำเนินการเชลล์ถูกแท็ก เปลือก
และตัวดำเนินการนักเทียบท่าคือแท็ก นักเทียบท่า
ดังนั้นฉันจึงสามารถตัดสินใจได้ว่าจะรันงานสร้างจากไฟล์ gitlab-ci.yml ที่ใด
gitlab-ci.yml
.เทมเพลต:
before_script:
- cat /proc/sys/user/max_user_namespaces
สคริปต์:
- เข้าสู่ระบบ $ENGINE -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- $ENGINE build -f container/php-71.dockerfile -t "$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$TAG:$CI_PIPELINE_ID"
- $ENGINE พุช "$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$TAG:$CI_PIPELINE_ID"
build-with-docker-in-shell-executor:
ขยาย: . template
ตัวแปร:
เครื่องยนต์: นักเทียบท่า
TAG: สร้างด้วยนักเทียบท่า
แท็ก: [เปลือก]
build-with-docker-in-docker-executor:
ขยาย: . template
รูป: docker:dind
ตัวแปร:
เครื่องยนต์: นักเทียบท่า
แท็ก: build-with-docker-in-docker
แท็ก: [นักเทียบท่า]
สร้างด้วย podman-in-docker-executor:
ขยาย: . template
ภาพ: quay.io/podman/stable
ตัวแปร:
เครื่องยนต์: พ็อดแมน
แท็ก: build-with-podman-in-docker
แท็ก: [นักเทียบท่า]
ของฉัน คอนเทนเนอร์/php-71.dockerfile
เป็นเรื่องเล็กน้อย ก็ใช้ เซ็นโตส:7
และดำเนินการก
พวงของ ยำติดตั้ง
คำสั่ง:
จาก docker.io/centos:7
RUN yum install -y epel-release centos-release-scl
รัน yum install -y rh-php71
งานแรกล้มเหลวเนื่องจากผู้ใช้ gitlab Runner ของฉันไม่สามารถเข้าถึง
ซ็อกเก็ตนักเทียบท่า:
ได้รับอนุญาตถูกปฏิเสธขณะพยายามเชื่อมต่อกับ Docker
daemon socket ที่ยูนิกซ์:///var/run/docker.sock: โพสต์
"http://%2Fvar%2Frun%2Fdocker.sock/v1.24/auth": หมุนหมายเลขยูนิกซ์
/var/run/docker.sock: เชื่อมต่อ: ปฏิเสธการอนุญาต
ฉันคิดว่ามันโอเค (หรือปัจจุบันแนะนำให้อนุญาตการเข้าถึงนักเทียบท่าสำหรับ
ผู้ใช้ที่ไม่ใช่รูท?) ดังนั้นงานนี้จึงมีไว้เพื่อการอ้างอิงเท่านั้น
นักเทียบท่าในงานนักเทียบท่าล้มเหลวเนื่องจาก yum ไม่มีการเข้าถึงเครือข่าย
ดูเหมือนว่า:
ขั้นตอนที่ 1/3 : จาก docker.io/centos:7
---> eeb6ee3f44bd
ขั้นตอนที่ 2/3: RUN yum install -y epel-release centos-release-scl
---> ทำงานใน 8e41cd05bcc1
ปลั๊กอินที่โหลด: fastmirror, ovl
การกำหนดมิเรอร์ที่เร็วที่สุด
ไม่สามารถเรียก mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=container เกิดข้อผิดพลาด
12: หมดเวลาใน http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=container: (28, 'การแก้ไขหมดเวลาหลังจาก 30548 มิลลิวินาที')
หนึ่งในที่เก็บที่กำหนดค่าไว้ล้มเหลว (ไม่ทราบ)
และ yum มีข้อมูลแคชไม่เพียงพอที่จะดำเนินการต่อ ณ จุดนี้เท่านั้น
สิ่งที่ปลอดภัยที่ยำทำได้คือล้มเหลว มีสองสามวิธีในการทำงาน "แก้ไข" สิ่งนี้:
1. ติดต่ออัปสตรีมสำหรับที่เก็บและขอให้แก้ไขปัญหา
2. กำหนดค่า baseurl/etc ใหม่ สำหรับที่เก็บเพื่อชี้ไปที่การทำงาน
ต้นน้ำ ซึ่งมักจะมีประโยชน์มากที่สุดหากคุณใช้เวอร์ชันที่ใหม่กว่า
รีลีสการแจกจ่ายที่ได้รับการสนับสนุนโดยที่เก็บ (และ
แพ็คเกจสำหรับการวางจำหน่ายก่อนหน้านี้ยังคงใช้งานได้)
3. รันคำสั่งโดยที่ repository ปิดใช้งานชั่วคราว
ยำ --disablerepo=<repoid> ...
4. ปิดการใช้งาน repository อย่างถาวร ดังนั้น yum จะไม่ใช้โดยปริยาย ยำ
จากนั้นจะละเว้นที่เก็บจนกว่าคุณจะเปิดใช้งานอย่างถาวร
อีกครั้งหรือใช้ --enablerepo สำหรับการใช้งานชั่วคราว:
yum-config-manager -- ปิดการใช้งาน <repoid>
หรือ
repos ตัวจัดการการสมัครสมาชิก --disable=<repoid>
5. กำหนดค่าพื้นที่เก็บข้อมูลที่ล้มเหลวให้ข้ามไป หากไม่พร้อมใช้งาน
โปรดทราบว่า yum จะพยายามติดต่อ repo เมื่อรันคำสั่งส่วนใหญ่
เลยต้องลองผิดลองถูกกันไปตลอด(ป่านนี้ยำจะเยอะ
ช้าลง) หากเป็นปัญหาชั่วคราว ก็มักจะเป็นเรื่องดี
ประนีประนอม:
yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true
ไม่พบ baseurl ที่ถูกต้องสำหรับ repo: base/7/x86_64
คำสั่ง '/bin/sh -c yum install -y epel-release centos-release-scl' ส่งคืนรหัสที่ไม่ใช่ศูนย์: 1
และพอดแมนในนักเทียบท่าเป็นข้อผิดพลาดที่แปลกประหลาดที่สุดในบรรดาข้อผิดพลาดทั้งหมด มันล้มเหลวอยู่แล้ว
ที่ พ็อดแมนเข้าสู่ระบบ
สั่งการ:
time="2021-11-01T13:34:31Z" level=warning msg="\"/\" ไม่ใช่การต่อเชื่อมที่ใช้ร่วมกัน ซึ่งอาจทำให้เกิดปัญหาหรือขาดการต่อเชื่อมกับคอนเทนเนอร์ที่ไม่มีรูท"
ไม่สามารถโคลน: การดำเนินการไม่ได้รับอนุญาต
ข้อผิดพลาด: ไม่สามารถเรียกใช้กระบวนการใหม่ได้
คำถาม
ฉันต้องการใช้ podman ใน docker หรือ docker ใน docker เพื่อสร้างอิมเมจของฉัน
ฉันจะใช้ขั้นตอนใดในการแก้ไขจุดบกพร่องและแก้ไขปัญหานี้ได้บ้าง