چگونه از متغیرهای محیطی در آرایه ENTRYPOINT داکرفایل استفاده کنیم؟
فرض کنید که می خواهیم در بخش ENTRYPOINT داکر فایل مانند زیر به جای world از یک متغیر محیطی استفاده کنیم.
ENTRYPOINT ["./greeting", "--message", "Hello, world!"]
که در آن world
مقداری است که از متغیر محیطی گرفته میشود. اگر سعی کنیم با جایگزین کردن "Hello, $MY_VARIABLE"
در دستور بالا این کار را انجام دهیم، این کار بدرستی عمل نمی کند.
برای استفاده صحیح از متغیرهای محیطی در Docker، ضروری است که متوجه باشید شکل exec از ENTRYPOINT
به همان شکل، در دستور shell عمل نمیکند. در واقع، زمانی که از شکل exec استفاده میکنید، Docker دستورات شما را داخل یک شل اجرا نمیکند، بنابراین تفسیر متغیرهای محیطی مانند $MY_VARIABLE
انجام نخواهد شد.
به منظور انجام تفسیر متغیرهای محیطی، دو راه برای حل مشکل وجود دارد:
1. استفاده از شکل shell:
میتوانید به سادگی از شکل shell استفاده کنید و متغیرها در این روش تفسیر می شوند. به عنوان مثال:
ENTRYPOINT ./greeting --message "Hello, $MY_VARIABLE!"
این دستور به طور صحیح متغیر $MY_VARIABLE
را در زمان اجرا تفسیر میکند.
2. اجرای اسکریپت shell:
راه دیگر اجرای یک اسکریپت شل است، بدین صورت که ابتدا یک اسکریپت shell می سازیم و مقادیر مورد نظر را به عنوان ورودی به آن می دهیم. نمونهای از این روش به صورت زیر است:
RUN echo "#!/bin/bash \n ./greeting --message \"Hello, ${ADDRESSEE}\"" > ./entrypoint.sh
RUN chmod +x ./entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]
با استفاده از این رویکردها، میتوانید اطمینان حاصل کنید که متغیرهای محیطی به درستی تفسیر شده و دستورات شما به شکل مناسب اجرا میشوند. استفاده از این تکنیکها به شما کمک میکند که آرگومانهای اضافی نیز به اسکریپت پاس داده شوند و انعطافپذیری بیشتری داشته باشید.