#docker #dockerpy
#docker #dockerpy
Вопрос:
Я пытаюсь установить переменную среды PATH внутри контейнера, используя python docker api, но, похоже, не работает, контейнер не запускается
у кого-нибудь есть идеи, как установить переменную PATH env, другие переменные env работают с файлом.
Я вижу следующую ошибку OCI runtime exec сбой: exec сбой: container_linux.go: 344: запуск процесса контейнера вызвал «exec: «bash «: исполняемый файл не найден в $ PATH»: неизвестно
(exitCode, socConn) = self.container.exec_run('bash -e build/otin/BashCheckGCCVersion.sh',socket=True,environment=["PATH=/usr/lib64/ccache"])
or
environment=[
"CCACHE_DIR=/work/.ccache",
"PATH=/usr/lib64/ccache",
"BUILDS_ALL_TIME=" sys.argv[2],
"PATCH_10.2=" sys.argv[1]],
working_dir="/OTINBuild",
Комментарии:
1. Похоже, что настройка переменной окружения работает нормально, но единственный путь к контейнеру, по которому выполняется поиск любых двоичных файлов вообще, — это
/usr/lib64/ccache
и в этом единственном каталоге нетbash
двоичного файла. (Если вы хотите, чтобы/bin
выполнялся поиск, она также должна быть в$PATH
.)2. Как упоминал @DavidMaze, это может быть неправильный путь / путь не существует, проверьте журналы docker (или) войдите во вновь созданный контейнер и убедитесь, что путь существует, используя базовые команды ls -l yourpath, а также проверьте, установлены ли другие переменные среды или нет.
Ответ №1:
пожалуйста, поделитесь деталями api (или) скрипта python со всеми подробностями — здесь его минимальное значение включает ваш файл docker (docker build cmd). Обратитесь ниже к синтаксису и пытаетесь ли вы переопределить переменные среды, установленные процессом сборки образа docker?
Ссылка:https://docker-py.readthedocs.io/en/stable/api.html
exec_create(container, cmd, stdout=True, stderr=True, stdin=False, tty=False, privileged=False, user='', environment=None, workdir=None, detach_keys=None)
environment (dict or list) – A dictionary or a list of strings in the following format ["PASSWORD=xxx"] or {"PASSWORD": "xxx"}.
Комментарии:
1. (ExitCode, sockconn) = self.container.exec_run(‘bash -e build/otin/BashCheckGCCVersion.sh’,socket=True,environment=[«ПУТЬ =/usr/lib64/ccache»])
Ответ №2:
Есть ли в образе docker bash
команда. Попробуйте другую универсальную команду, такую как sh
, ls
вместо bash
.
Ответ №3:
Если вы используете словарь для настройки своей переменной окружения, это будет работать следующим образом:
environment = {"Name_Variable":"Name_Path","Name_Variable2":"Name_Path2"...}
(exitCode, socConn) = self.container.exec_run('bash -e build/otin/BashCheckGCCVersion.sh',socket=True,environment=environment)
Если вы попытаетесь проверить, работает ли это со следующей командой :
docker exec -it "Name_Container" echo $Name_Variable
Она не покажет вам значение.
Терминал выполняет параметр $Name_Variable, прежде чем «отправить» его в docker.
Вы должны ввести в свой контейнер с помощью bash и выполнить echo $Name_Variable.