Не удается отредактировать файл окружения с помощью sudo в контейнере Docker - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть контейнер docker, который построен на ubuntu:bionic. В этом контейнере я хочу установить java и установить PATH и JAVA_HOME переменные. Вот как я это сделал:

Dockerfile

FROM ubuntu:bionic
USER root
RUN adduser --disabled-password kafka-ui
RUN apt-get update && apt-get install -y sudo git apt-utils
ADD /sudoers.txt /etc/sudoers
RUN chmod 440 /etc/sudoers
COPY entrypoint.sh /entrypoint.sh
RUN chmod 755 /entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]
USER kafka-ui

sudoers.txt

Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
root    ALL=(ALL) NOPASSWD: ALL
%sudo   ALL=(ALL:ALL) ALL
kafka-ui ALL=(ALL) NOPASSWD: ALL

точка входа. sh

#!/bin/bash

sudo apt-get upgrade -y
sudo apt-get update && sudo apt-get install -y openjdk-11-jdk git

sudo echo "JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/" >> /etc/environment
sudo echo "PATH=$PATH:$JAVA_HOME/bin" >> /etc/environment
source /etc/environment

В 6-я и 7-я строки файла entrypoint.sh, я получил /entrypoint.sh: line 6: /etc/environment: Permission denied, хотя я использовал sudo. Что здесь может быть не так?

1 Ответ

2 голосов
/ 15 апреля 2020

Почему вы не устанавливаете java в Dockerfile? Я имею в виду, что если вы будете делать это следующим образом, при каждом запуске контейнера будет устанавливаться Java, хотите ли вы этого?

В случае, если это не является обязательным требованием, вы можете установить java в Dockerfile и затем использовать

ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
ENV PATH="$JAVA_HOME/bin:${PATH}"

В случае, если это неприемлемо, попробуйте выполнить «отладку», вставив в контейнер, и выполните эти команды вручную

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