почему мой докерский контейнер (centos) не запускается / etc / bashrc? - PullRequest
0 голосов
/ 29 января 2019

Я создаю образ докера, в который я хотел бы смонтировать свой домашний каталог.Однако есть другой файл bashrc, который я хотел бы запустить при создании экземпляра.

Проблема в том, что я не могу скопировать этот файл bashrc в рабочий каталог моего пользователя, поскольку именно там я буду монтировать свой (хост)) домашний каталог.Я попытался таким образом добавить к /etc/bashrc или положить в /etc/profile.d, но он никогда не запускается.

Мой dockerfile выглядит так:

FROM centos:7

RUN adduser -s /bin/bash user -G users
RUN echo "echo /etc/bashrc" >> /etc/bashrc
RUN echo "echo /etc/profile" >> /etc/profile
RUN echo "echo /etc/profile.d/mine.sh" >> /etc/profile.d/mine.sh

USER user
WORKDIR /home/user
ENTRYPOINT [ "/bin/bash" ]

Я сейчас собираю и запускаю этотконтейнер при монтировании моего домашнего каталога:

docker build -t devenv .
docker run --rm --volume $HOME:/home/user -it devenv

Когда я открываю консоль, запускается только (смонтированный) .bashrc.Однако, если я запускаю bash -l (оболочка входа в систему);затем запускаются файлы профиля (но не .bashrc).

bash-4.2$ bash
inside mounted host .bashrc
bash-4.2$ bash -l
/etc/profile.d/mine.sh
/etc/profile
/etc/profile.d/mine.sh
/etc/profile

Так что я не знаю, куда поместить мою логику, которая будет работать при входе в консоль (и .bashrc также должен работать)?Почему / etc / bashrc никогда не запускается?

EDIT : при запуске bash или даже bash -l на виртуальной машине centos7;/ etc / bashrc запускается ...

1 Ответ

0 голосов
/ 29 января 2019

Firstmost;спасибо @chepner за объяснение, почему / etc / bashrc не запускается.Итак, я нашел этот хороший обходной путь:

  • принудительная загрузка bash /etc/bashrc при запуске
  • внутри /etc/bashrc;добавьте мою конкретную конфигурацию и затем запустите ~/.bashrc

Dockerfile:

FROM centos:7

RUN adduser -s /bin/bash user -G users
# remove /home/user/.bashrc to avoid infinite loop with /etc/bashrc
# when /home/user is not mounted
RUN rm /home/user/.bashrc
RUN echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> /etc/bashrc
RUN echo "echo /etc/bashrc" >> /etc/bashrc
RUN echo "echo /etc/profile" >> /etc/profile
RUN echo "echo /etc/profile.d/mine.sh" >> /etc/profile.d/mine.sh

USER user
WORKDIR /home/user
ENTRYPOINT [ "/bin/bash", "--rcfile", "/etc/bashrc" ]

снова сборка и запуск выдает мне такой вывод:

/etc/profile.d/mine.sh
/etc/bashrc
inside mounted host .bashrc
inside bashrc

CAVEAT : обязательно удалите оригинальный .bashrc в образе вашего докера.Содержимое по умолчанию в centos: 7 из ~ / .bashrc:

if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

, которое создает бесконечный цикл, если домашний каталог не смонтирован.

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