У меня есть докер-контейнер с базовым образом Ubuntu.Я использую следующую команду для его запуска.
docker container run -it -d -v c:\Git\ENGINE_LIB_DIR:/ENGINE_LIB_DIR:ro --name ibuntu ubuntu
внутри подключенного тома - Java JDK и скрипт, который выглядит следующим образом:
#!/bin/bash
echo "export JAVA_HOME=/ENGINE_LIB_DIR/jdk/" >> ~/.bashrc;
echo "export PATH=${PATH}:/ENGINE_LIB_DIR/jdk/bin/" >> ~/.bashrc;
exec bash
Таким образом, он в основном добавляет подключенную Javaк пути, чтобы сделать его полезным.Этот сценарий работает, пока я выполняю его из Ubuntu Bash внутри контейнера.Если я пытаюсь использовать
docker exec -it ibuntu sh -c "sh /ENGINE_LIB_DIR/action.sh"
извне контейнера, он не выдает никакого сообщения об ошибке, тогда как
docker exec -it ibuntu sh -c "java -version"
Возвращает «java: not found».Поэтому я подозреваю, что скрипт не выполняется должным образом.Я пробовал абсолютные пути, просто без "sh -c" и, в основном, любого другого метода, который я нашел путем googeling.
Моя цель - легко использовать java jdk, предоставленный внутри контейнера докера, для создания проекта.Я рад любой помощи.
Редактировать: я попробовал / bin / bash -ic подход из @itachi.Он по-прежнему говорит, что java: не найдено, в то время как вызов оболочки возвращает эту ошибку:
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
sh: 0: Can't open ./ENGINE_LIB_DIR/action.sh
Редактировать 2: Мне удалось сузить поведение до команды docker exec
.Я установил контейнер с docker container run -it -d -v c:\Git\ENGINE_LIB_DIR:/ENGINE_LIB_DIR:ro --entrypoint /ENGINE_LIB_DIR/action.sh --name ibuntu ubuntu /bin/bash
.Переменная java path работает, когда присоединена к контейнеру, но когда я выполняю docker exec ibuntu sh -c "java -version"
, она все равно говорит sh: 1: java: not found
.Буду благодарен за любую идею.