เมื่อสร้างจาก Dockerfile ไม่อนุญาตให้ติดตั้งแพคเกจ Debian / Ubuntu ในการติดตั้ง debconf การติดตั้งแบบไม่โต้ตอบ


29

ฉันได้ตั้งค่าสภาพแวดล้อมต่อไปนี้เพื่อไม่ให้มีการถามคำถาม / โต้ตอบระหว่างการติดตั้ง apt-get:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

ซึ่งเทียบเท่ากับ:

export DEBIAN_FRONTEND="noninteractive"

แต่เมื่อสร้างภาพจาก Dockerfile เมื่อสิ้นสุดการติดตั้งแพ็คเกจ Debian / Ubuntu หนึ่งชุด (โดยใช้ apt-get install) การกำหนดค่าแพคเกจ debconf บอกว่า:

debconf: unable to initialize frontend: Noninteractive    # export DEBIAN_FRONTEND="noninteractive"
debconf: (Bareword "Debconf::FrontEnd::Noninteractive" not allowed while "strict subs" in use at (eval 35) line 3, <> line 1.)
debconf: falling back to frontend: Noninteractive
Subroutine BEGIN redefined at (eval 36) line 2, <> line 1.

ว้าว ... ฉันพบข้อผิดพลาด ไม่มีวิธีที่จะใส่ความคิดเห็นในบรรทัด ENV ใน Dockerfile ฉันจะตอบตัวเองเพราะฉันแน่ใจว่านี่จะกัดคนอื่น ...

คำตอบ:


57

มันควรจะท้อแท้อย่างแข็งขันในการกำหนดDEBIAN_FRONTENDที่จะผ่านnoninteractive เหตุผลก็คือว่าตัวแปรสภาพแวดล้อมยังคงอยู่หลังจากการสร้างเช่นเมื่อคุณเรียกใช้ENV docker exec -it ... bashการตั้งค่าจะไม่สมเหตุสมผลที่นี่

มีสองวิธีที่เป็นไปได้อื่น ๆ :

  1. ตั้งค่าผ่านARGเนื่องจากมีเฉพาะในช่วงบิลด์:

    ARG DEBIAN_FRONTEND=noninteractive
    RUN apt-get -qq install {your-package}
    
  2. ตั้งค่าได้ทันทีเมื่อต้องการ

    RUN apt-get update && \
        DEBIAN_FRONTEND=noninteractive apt-get -qq install {your-package}
    

8
สมัครใช้งานเพื่อลงคะแนนเท่านั้น
André Werlang

@ AndréWerlang: ฉันด้วย!
gvgramazio

27

ตกลงแหล่งที่มาของปัญหาคือ: คุณไม่สามารถใช้ # เพื่อใส่ความคิดเห็นในบรรทัด ENV ใน Dockerfiles เพราะไม่มีตัวคั่นที่จะพูดว่า "end of env variable" ทุกอย่างที่เป็นชื่อตัวแปรและพื้นที่ทันทีหลังจากนั้นจะอยู่ใน ตัวแปร.

เช่นกับบรรทัด Dockerfile:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

ตัวแปร:

DEBIAN_FRONTEND

จะมีทั้งหมดนี้ว่า

noninteractive    # export DEBIAN_FRONTEND="noninteractive"

และเทียบเท่ากับการทำ:

export DEBIAN_FRONTEND='noninteractive    # export DEBIAN_FRONTEND="noninteractive"'

ฉันเกือบจะยกเลิกคำถามของฉัน แต่ด้วยเครื่องมือค้นหาและ Stack Exchange บางคนอาจพบข้อผิดพลาดที่นี่บางวัน ;-)


5
หากนี่เป็นคำตอบที่แท้จริงคุณควรยอมรับเช่นนี้ดังนั้นคำถามจะไม่ปรากฏในรายการว่าไม่ได้รับคำตอบอีกต่อไป
Andy Shinn

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