python docker api как мы устанавливаем переменную среды path?

#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.