Score:0

นักเทียบท่า/Podman ใน Docker ล้มเหลวในฐานะงาน GitLab CI

ธง cn

บริบท

ฉันกำลังใช้งานอินสแตนซ์ 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 เพื่อสร้างอิมเมจของฉัน ฉันจะใช้ขั้นตอนใดในการแก้ไขจุดบกพร่องและแก้ไขปัญหานี้ได้บ้าง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา