ไม่สามารถติดตั้งแพ็คเกจภายในอิมเมจ docker Ubuntu


289

ฉันติดตั้ง Ubuntu 14.04 รูปบนตัวเทียบท่า หลังจากนั้นเมื่อฉันพยายามติดตั้งแพ็กเกจภายในอิมเมจของ Ubuntu ฉันจะไม่สามารถค้นหาข้อผิดพลาดของแพ็คเกจได้:

apt-get install curl

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package curl

จะแก้ไขข้อผิดพลาดนี้ได้อย่างไร?

คำตอบ:


622

เป็นเพราะไม่มีแพ็กเกจแคชในภาพคุณต้องเรียกใช้:

apt-get update

ก่อนการติดตั้งแพ็กเกจและหากคำสั่งของคุณอยู่ใน Dockerfile คุณจะต้อง:

apt-get -y install curl

-qqเพื่อให้การปราบปรามออกมาตรฐานจากการใช้คำสั่ง เช่น

apt-get -qq -y install curl

1
สิ่งนี้ใช้ได้กับฉันฉันควรรัน -qq ตลอดเวลา
Developer

6
-qq ระงับเอาต์พุตซึ่งโดยปกติคุณไม่ต้องการใช้ใน Dockerfile อีกกลอุบายที่ดี - บอก debconf ว่ามันทำงานในสภาพแวดล้อมแบบไม่โต้ตอบ: echo 'debconf debconf / frontend select Noninteractive' | debconf-set-selections
ISanych

7
ด้วยเหตุผลบางอย่างสิ่งนี้ไม่ได้ผลสำหรับฉันยังคงเหมือนเดิม "E: ไม่สามารถค้นหาแพคเกจ .. " ข้อความ
tblancog

"apt-get-update" และ "apt-get curl install" ทำงานได้ดี!
Sindhu

ฉันพบว่าข้อผิดพลาดนี้เกิดขึ้นในนักเทียบท่าเมื่อพื้นที่ว่างหมด ฉันวิ่งdocker image pruneเพื่อเพิ่มพื้นที่ว่างและแก้ไขให้ฉัน
Jonathan Rys

123

จากเอกสารในเดือนพฤษภาคม2017 2018 2019 2020

ตัวอย่างเช่นรวมRUN apt-get updateกับapt-get installในRUNคำสั่งเดียวกัน เสมอ

RUN apt-get update && apt-get install -y package-bar

( ... )

การใช้apt-get updateเพียงอย่างเดียวในRUNข้อความสั่งทำให้เกิดปัญหาการแคชและapt-get installคำแนะนำที่ตามมาล้มเหลว

( ... )

การใช้RUN apt-get update && apt-get install -yทำให้มั่นใจได้ว่า Dockerfile ของคุณจะติดตั้งเวอร์ชันแพ็คเกจล่าสุดโดยไม่มีการเข้ารหัสหรือการแทรกแซงด้วยตนเอง เทคนิคนี้เรียกว่า“ การป้องกันแคช”



4

ตรวจสอบให้แน่ใจว่าคุณไม่มีข้อผิดพลาดทางไวยากรณ์ใน Dockerfile ของคุณเนื่องจากอาจทำให้เกิดข้อผิดพลาดนี้เช่นกัน ตัวอย่างที่ถูกต้องคือ:

RUN apt-get update \
    && apt-get -y install curl \
    another-package

มันเป็นการรวมกันของการแก้ไขข้อผิดพลาดทางไวยากรณ์และการเพิ่มapt-get updateที่แก้ไขปัญหาให้ฉัน


1

ฉันพบว่าการติดตั้งโลคัลวอลุ่มบน / tmp อาจทำให้เกิดปัญหาสิทธิ์เมื่อรัน "apt-get update" รันซึ่งป้องกันไม่ให้แคชแพ็กเกจถูกบรรจุ หวังว่านี่ไม่ใช่สิ่งที่คนส่วนใหญ่ทำ แต่มันเป็นอย่างอื่นที่ต้องมองหาถ้าคุณเห็นปัญหานี้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.