ไม่พบ systemctl ขณะสร้างภาพ Mongo
ฉันพยายามสร้างอิมเมจ mongo 4.4 โดยใช้Dockerfileอิมเมจอย่างเป็นทางการแต่ฉันพบปัญหาเกี่ยวกับ systemctl ไม่พบ ภาพนั้นมีเส้นให้ลบออกหลังการตั้งค่า แต่ไม่แน่ใจว่ามาจากไหน ความคิดใด ๆ ?
Setting up mongodb-org-database-tools-extra (4.4.0) ...
Setting up librtmp1:amd64 (2.4+20151223.gitfa8646d.1-1) ...
Setting up libkrb5support0:amd64 (1.16-2ubuntu0.1) ...
Setting up krb5-locales (1.16-2ubuntu0.1) ...
Setting up libkeyutils1:amd64 (1.5.9-9.2ubuntu2) ...
Setting up libk5crypto3:amd64 (1.16-2ubuntu0.1) ...
Setting up libkrb5-3:amd64 (1.16-2ubuntu0.1) ...
Setting up libgssapi-krb5-2:amd64 (1.16-2ubuntu0.1) ...
Setting up libcurl4:amd64 (7.58.0-2ubuntu3.10) ...
Setting up mongodb-database-tools (100.1.1) ...
Setting up mongodb-org-mongos (4.4.0) ...
Setting up mongodb-org-tools (4.4.0) ...
Setting up mongodb-org-server (4.4.0) ...
/var/lib/dpkg/info/mongodb-org-server.postinst: 43: /var/lib/dpkg/info/mongodb-org-server.postinst: systemctl: not found
dpkg: error processing package mongodb-org-server (--configure):
installed mongodb-org-server package post-installation script subprocess returned error exit status 127
Setting up mongodb-org-shell (4.4.0) ...
dpkg: dependency problems prevent configuration of mongodb-org:
mongodb-org depends on mongodb-org-server; however:
Package mongodb-org-server is not configured yet.
dpkg: error processing package mongodb-org (--configure):
dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.27-3ubuntu1.2) ...
Errors were encountered while processing:
mongodb-org-server
mongodb-org
[91mE: Sub-process /usr/bin/dpkg returned an error code (1)
[0mThe command '/bin/sh -c set -x && export DEBIAN_FRONTEND=noninteractive && apt-get update && echo "mongodb-org hold" | dpkg --set-selections && echo "mongodb-org-server hold" | dpkg --set-selections && echo "mongodb-org-shell hold" | dpkg --set-selections && echo "mongodb-org-mongos hold" | dpkg --set-selections && echo "mongodb-org-tools hold" | dpkg --set-selections && apt-get install -y ${MONGO_PACKAGE}=$MONGO_VERSION ${MONGO_PACKAGE}-server=$MONGO_VERSION ${MONGO_PACKAGE}-shell=$MONGO_VERSION ${MONGO_PACKAGE}-mongos=$MONGO_VERSION ${MONGO_PACKAGE}-tools=$MONGO_VERSION && rm -f /usr/local/bin/systemctl && rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/mongodb && mv /etc/mongod.conf /etc/mongod.conf.orig' returned a non-zero code: 100
คำตอบ
เพื่อความแม่นยำ
RUN ln -s /bin/echo /bin/systemctl
RUN apt-get -qqy install mongodb-org
FL3SH คำตอบผลงาน แต่สื่อความหมายได้อย่างมีประสิทธิภาพมากขึ้นคุณสามารถสร้างการเชื่อมโยงสัญลักษณ์จากไป/bin/systemctl/bin/true
/bin/trueเป็นคำสั่งที่ส่งกลับ 0 เสมอ (ค่าที่แท้จริงของเชลล์) ดังนั้นจึงไม่ล้มเหลว เป็นวิธีมาตรฐานในการระบุว่าคุณต้องการคืนค่าจริง ดูโพสต์ SO นี้ด้วย
คำสั่งที่คุณต้องเพิ่มใน Dockerfile คือ:
RUN ln -s /bin/true /usr/local/bin/systemctl
หรือ
RUN ln -s /bin/true /bin/systemctl
ผลกระทบคือคุณหลอกสคริปต์หลังการติดตั้งโดยการเรียก/bin/trueแทน/bin/systemctl
คุณสามารถค้นหาเคล็ดลับเดียวกันนี้ใน mongodb Dockerfile 4.4 บรรทัด 91ที่เชื่อมโยงกับ haytham ในคำอธิบายของเขา
/bin/echoทำงานได้ดี/bin/trueเนื่องจาก echo ส่งกลับ 0 เช่นกัน คุณสามารถลองทำได้โดยทำ
echo "test"
echo $?
และคุณจะเห็น 0 echoเป็นผลจากการที่สอง
echo ln ถึง / bin / systemctl ช่วยแก้ปัญหาได้