Как я могу выполнить файл. sh после команды cd в файле dockerfile? - PullRequest
4 голосов
/ 05 мая 2020

Я пытаюсь установить Libressl в образе python base docker. Образ Python по умолчанию имеет openssl.

Мой Dockerfile код:

FROM python:3.7

RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install git cpp make dh-autoreconf -y
RUN pip3 install requests
RUN git clone https://github.com/libressl-portable/portable.git /portable
RUN cd /portable \
       ./autogen.sh \
       ./configure --prefix=/opt/libressl --enable-nc \
       make check \
       make install

RUN echo "alias openssl='/opt/libressl/bin/openssl'" >> ~/.bashrc

COPY . /app
WORKDIR /app
CMD ["python3", "./debug.py"]

Но я обнаружил, что git clone выполнен хорошо, но следующая команда не удалась.

Даже autogen.sh, похоже, не выполняется.

И как я могу получить этот .bashrc файл?

Когда я использую source ~/.bashrc, исходная команда не может быть найдена, потому что команда запускается с /bin/sh.

В чем может быть проблема в моем Dockerfile?

Спасибо :)

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Ответ от @alexander отличный. Другой подход к этому: выполнение сценария оболочки из файла Dockerfile и хранение всех команд оболочки в одном месте. сделать Dockerfile более элегантным.

например:

FROM python:3.7
COPY . /app
RUN ./app/script.sh
WORKDIR /app
CMD ["python3", "./debug.py"]

и скрипт. sh (вы пишете как простой скрипт оболочки) (копируйте \ мимо того, что вы опубликовали без тестирования):

apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install git cpp make dh-autoreconf -y
pip3 install requests
git clone https://github.com/libressl-portable/portable.git /portable
cd /portable \
       ./autogen.sh \
       ./configure --prefix=/opt/libressl --enable-nc \
make check
make install

echo "alias openssl='/opt/libressl/bin/openssl'" >> ~/.bashrc
2 голосов
/ 05 мая 2020

Для объединения нескольких вызовов команд используйте оператор &&. Дополнительно вы можете использовать один звонок с двумя целями

cd /portable && \
       ./autogen.sh && \
       ./configure --prefix=/opt/libressl --enable-nc && \
       make check install
...