Мы пытаемся запустить точку входа докера как root в образе докера, используемом нашим jupyterhub для однопользовательских серверов. Нам нужен root, чтобы добавить хост для доступа к внутреннему реестру git из однопользовательского сервера ноутбука jupyter на jupyterhub, работающем на K8S в его домене.
Мы уже пытались добавить домен в файл /etc/hosts
в образе докера, который загружается для однопользовательских серверов нашим jupyterhub в скрипте точки входа докера (код можно увидеть внизу).
Однако мы получаем отказ в разрешении при попытке добавить хост. Распечатки также показывают, почему:
Локально первый whoami показывает root
, как мы и ожидали. Однако на ноутбуке jupyter, запущенном в модуле нашего jupyterhub (работающем на K8s), первая распечатка уже показывает jovyan
.
Тот же эффект можно увидеть при непосредственной распечатке whoami в точке входа в Dockerfile следующим образом:
ENTRYPOINT ["sh", "-c", "echo $(whoami)"]
Это означает, что это вся точка входа, которая не выполняется как root, но пользователь каким-то образом заранее переключается.
Можем ли мы предотвратить такое поведение или есть хорошее решение?
Любая помощь приветствуется, заранее спасибо! PS: Кроме того, когда мы пытаемся запустить exec su - "jovyan"
в сценарии точки входа на 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"