שימו לב: הגדרת משתני סביבה בתחילת פקודה
16/11/2023
רוב ה Shell-ים תומכים בכתיב של הגדרת משתני סביבה לפני פקודה ובגלל זה אפשר לכתוב:
FOO=10 bash -c 'echo $FOO'
ולקבל על המסך את המספר 10.
אבל כשלוקחים את האמת הפשוטה הזאת ל Dockerfile החיים עלולים להסתבך. הרבה פעמים בכתיבת Dockerfile אנחנו משתמשים ב &&
כדי לשלב כמה פקודות, לדוגמה:
RUN apt-get update && apt-get install cowsay
אבל אם ננסה להוסיף משתנה סביבה בתחילת השורה לדוגמה בשביל למנוע התקנה אינטרקטיבית צפויה לנו הפתעה:
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install cowsay
משתנה הסביבה רלוונטי רק לפקודה הראשונה ברצף ולא משפיע על הפקודה שאחריה. אפשר להיווכח בזה בקלות אם נחזור לפקודה מתחילת הפוסט:
FOO=10 bash -c 'echo $FOO' && bash -c 'echo $FOO'
הפעם השורה תדפיס 10 רק פעם אחת, למרות שפקודת ההדפסה מופיעה פעמיים.
מה עושים? אפשרות אחת היא להוסיף את משתנה הסביבה בכל פקודה שמריצים גם כשמחברים כמה פקודות יחד, כלומר:
RUN DEBIAN_FRONTEND=noninteractive apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install cowsay
אפשרות קצת יותר נוחה היא להוסיף אותו בשורת ENV לפני הרצת הפקודה:
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install cowsay