Мы пытаемся запустить точку входа докера от имени пользователя root в образе докера, который используется нашим jupyterhub для однопользовательских серверов. Нам нужен root, чтобы добавить хост для доступа к внутреннему реестру git из однопользовательского сервера ноутбука jupyter на jupyterhub, работающем на K8S по его домену.
Мы уже пытались добавить домен в файл /etc/hosts
в образе докера, который загружается для однопользовательских серверов нашим jupyterhub в сценарии docker-entrypoint (код можно увидеть внизу).
Однако мы получаем отказ в разрешении при попытке добавить хост.
Распечатки также показывают, почему:
Локально, первый whoami показывает root
, как мы и ожидали.
На ноутбуке jupyter, запущенном в модуле нашего jupyterhub (работающем на K8s), первая распечатка уже показывает jovyan
.
Тот же эффект можно увидеть при прямой печати whoami в точке входа в Dockerfile следующим образом:
ENTRYPOINT ["sh", "-c", "echo $(whoami)"]
Это означает, что это целая точка входа, которая не выполняется как root, но пользователь каким-то образом переключается заранее.
Можем ли мы предотвратить такое поведение или есть хороший обходной путь?
Любая помощь приветствуется, спасибо заранее!
PS:
Кроме того, когда мы пытаемся запустить exec su - "jovyan"
в entrypoint-script на jupyterhub, мы получаем ошибку, что команду su нужно запускать с терминала. Локально работает без проблем.
Код сценария docker-entrypoint (только для справки):
Dockerfile:
FROM jupyter/datascience-notebook:1145fb1198b2
WORKDIR /usr/src/app
USER root
...
COPY aai-entrypoint.sh /usr/src/app/aai-entrypoint.sh
RUN chmod +x /usr/src/app/aai-entrypoint.sh
ENTRYPOINT ["sh", "/usr/src/app/my-entrypoint.sh"]
CMD ""
Мы добавили пустое CMD, чтобы перезаписать CMD базового ноутбука jupyter
my-entrypoint.sh:
#!/bin/bash
echo $(whoami)
echo "xx.xxx.xxx our.domain.com" >> /etc/hosts
echo "test"
exec su - "jovyan"
echo $(whoami)
# to not overwrite the entrypoint of the jupyter/base-notebook
# see https://github.com/jupyter/docker-stacks/blob/master/base-notebook/Dockerfile
exec tini -g -- "start-notebook.sh"