В настоящее время я создаю проект docker для запуска сервера Minecraft Spigot.
Для этого мне нужно иметь возможность запускать команды в запущенной оболочке (при использовании docker run -it d3strukt0r/spigot
) и косвенно с помощью docker exec <name> console <command>
. К сожалению, я не слишком люблю язык bash.
В настоящее время я могу отправлять команды косвенно, что очень удобно, когда я отключен. Я получил это с помощью:
_console_input="/app/input.buffer"
# Clear console buffers
true >$_console_input
# Start the main application
echo "[....] Starting Minecraft server..."
tail -f $_console_input | tee /dev/console | $(command -v java) $JAVA_OPTIONS -jar /app/spigot.jar --nogui "$@"
И при запуске консольной команды все, что она делает, это следующее:
echo "$@" >>/app/input.buffer
Код можно найти здесь
Кто-нибудь знает, как теперь добавить функциональность для прямого ввода команд?
СЛУЧАЙ ИСПОЛЬЗОВАНИЯ ПЕРВЫЙ: пользователь может работать с подключением, используя docker run
docker run -it --name spigot -p 25565:25565 -e EULA=true d3strukt0r/spigot:nightly
В этом случае пользователь определенно должен иметь возможность использовать консоль так, как он привык (при запуске java -jar spigot.jar
). Если у него открыта вторая консоль, он также может отправить команду с:
docker exec spigot console "time set day"
ВТОРОЙ СЛУЧАЙ ИСПОЛЬЗОВАНИЯ: пользователь может работать отдельно, используя docker run -d
docker run -d --name spigot -p 25565:25565 -e EULA=true d3strukt0r/spigot:nightly
В этом случае пользователь может отправлять команды только косвенно.
docker exec spigot console "time set day"
ИСПОЛЬЗУЙТЕ СЛУЧАЙ ТРЕТЬЯ И ЧЕТЫРЕ: Используйте docker -compose (см. Вариант использования «два», в принципе то же самое)