Ruby -Рейлы в Docker выходах после запуска docker - PullRequest
0 голосов
/ 08 апреля 2020

Я создал Dockerfile на основе описания для создания приложения rails в Linux. В настоящее время у меня есть две проблемы с текущей настройкой:

Во-первых, я получаю сообщение об ошибке или предупреждение после каждой команды RUN, начинающейся с переменной среды $ shell. Ошибка выглядит следующим образом:

mesg: ttyname failed: Inappropriate ioctl for device

Во-вторых, мой контейнер останавливается сразу после запуска с

docker run -d --name rails rails:test

Мой текущий файл docker выглядит следующим образом:

FROM ubuntu:18.04

RUN mkdir /usr/src/rails
WORKDIR /usr/src/rails

RUN apt-get update && apt-get install -y curl gnupg
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update && apt install -y yarn

RUN curl -sSL https://get.rvm.io | bash
RUN useradd -G rvm rails

ENV shell /bin/bash -l -c
#RUN . /usr/local/rvm/scripts/rvm
RUN echo ". /etc/profile.d/rvm.sh" >> ~/.bashrc
RUN $shell "rvm requirements"
RUN $shell "rvm install ruby"
RUN echo "gem: --no-rdoc --no-ri" >> ~/.gemrc
RUN $shell "gem install rails"
RUN $shell "ruby -v" && $shell "rails -v"

USER rails
EXPOSE 3000

#CMD ["rails", "server", "-b", "0.0.0.0"]
CMD ["/bin/bash"]

Решение с переменной $shell, которое я нашел на другом сайте. Без команды /bin/bash -l -c процесс сборки не удастся. Команда rvm или gem будет неизвестна. Упомянутая команда будет использоваться в качестве оболочки для реальной команды внутри кавычек. Я не очень понимаю, зачем это нужно. Если я создаю контейнер docker и выполняю команды, как они есть в Dockerfile, то все работает нормально. Почему это не работает, когда я выполняю команду внутри сценария Dockerfile?

Поскольку я использую команду оболочки, все работает хорошо, но я получаю это сообщение об ошибке или предупреждение, упомянутое выше. Изображение будет сделано, так что это скорее мелкая проблема. Основная проблема в том, что мой контейнер не запускается. Если я наберу команду docker run -d rails:test, контейнер будет сразу же завершен. Я не очень понимаю, почему. У кого-нибудь есть объяснения?

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