Двоичный файл точки входа Dockerfile установлен в переменную aenv - PullRequest
0 голосов
/ 24 марта 2020

У меня есть скрипт для создания Docker изображения. В этом скрипте построителя я передал двоичное имя как build-args.

Однако, когда я использую его в точке входа как: Entrypoint["./"${pkg}], он разрешает pkg, контейнер Docker не запускается, заявляя «./rtspappserver not found».

Здесь rtspappserver - это имя pkg. Аргументы сборки, которые я отправил из сценария, были заданы как переменные ENV в Dockerfile.

Ниже приведен справочный файл Dockerfile:

#Download base image ubuntu 18.04
FROM ubuntu:18.04
ARG package_name
ENV TZ=Etc/UTC
ENV pkg=$package_name
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Update and dist-upgrade ubuntu
RUN apt update -y && \
    apt dist-upgrade -y && \
    apt install -y python-heatclient
WORKDIR /
COPY ${pkg} /
ENTRYPOINT ["./rtspappserver"]

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Это вариант, который я бы не стал использовать как build-arg. По моему общему опыту, если у вас есть среда, которая генерирует несколько двоичных файлов или команд, то большая часть изображения (как по размеру изображения, так и по сложности Dockerfile) - это код, который используется всеми командами, поэтому создайте отдельное изображение каждая команда может быть излишней.

Вы можете указать альтернативную команду для запуска как часть команды docker run после имени изображения или в строке command: в файле docker-compose.yml. Затем вы можете скопировать все в изображение, указав некоторую команду по умолчанию

FROM ubuntu:18.04
...
WORKDIR /app  # try to avoid dropping things in /
ENV PATH /app:$PATH
COPY . .
CMD mainserver

Теперь, если вы просто docker run the_image, она будет работать mainserver, но вместо этого вы можете

docker run ... the_image rtspappserver

выполните альтернативную команду.

0 голосов
/ 24 марта 2020

Не уверен, правильно ли я понял вопрос, но это может помочь: вы можете указать ENTRYPOINT в форме 'shell' или 'exe c'. В настоящее время вы используете последний, который не интерполирует переменные окружения.

Из документов :

Вы можете указать простую строку для ENTRYPOINT, и она будет выполнить в / bin / sh - c. Эта форма будет использовать обработку оболочки для замены переменных среды оболочки [...]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...