چرا source بوسیله دستور RUN در Dockerfile اجرا نمی شود؟

mohsen3 هفته قبل3 هفته قبل
ارسال شده در
docker

فرض کنید فایل داکری به صورت زیر داریم و می خواهیم بوسیله دستور source فایل virtualenvwrapper.sh را اجرا کنیم. اما به درستی کار نمی کند:

      FROM ubuntu:12.04

RUN apt-get install python-dev -y

RUN pip install virtualenvwrapper

RUN source /usr/local/bin/virtualenvwrapper.sh

    

مشکل اصلی این است که Docker به طور پیش‌فرض از /bin/sh برای اجرای دستورات در RUN استفاده می‌کند و source یک دستور خاص در bash است. برای رفع این مشکل، شما می‌توانید چندین راهکار زیر را امتحان کنید:

1 تغییر شل پیش‌فرض: با استفاده از دستور SHELL، می‌توانید شل پیش‌فرض را به bash تغییر دهید. به این صورت می‌توانید کد زیر را به Dockerfile اضافه کنید:

      SHELL ["/bin/bash", "-c"]
    

با این تغییر، تمام دستورات RUN بعدی به جای sh با bash اجرا می‌شوند و می‌توانید از source بدون مشکل استفاده کنید.

2 استفاده از نقطه (: اگر تمایل دارید از sh استفاده کنید، می‌توانید به جای source از نقطه (.) برای بارگذاری اسکریپت استفاده کنید:

      RUN . /usr/local/bin/virtualenvwrapper.sh
    

3 اجرا با شل لاگین: همچنین می‌توانید با استفاده از گزینه --login، یک شل لاگین ایجاد کنید:

      RUN /bin/bash --login -c 'your_commands_here'

    
رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!