在 运行 进程中直接发送命令和间接发送命令(例如使用尾巴)
Send commands directly in running process and indirectly (e. g. with tail)
我目前正在为 运行 Minecraft Spigot 服务器构建一个 docker 项目。
为了实现这一点,我需要能够 运行 在 运行 宁 shell(使用 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
代码可以找到here
有人知道如何添加直接输入命令的功能吗?
用例一:用户可以 运行 使用 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(看用例"two",基本一样)
您可以制作一个脚本,其行为类似于迷你 shell,从标准输入读取并写入 /app/input.buffer
。将它设置为容器的 CMD
以便它默认运行。将它放在与 Dockerfile
相同的目录中,并确保它是可执行的。
interactive_console
#!/bin/sh
while IFS= read -rp '$ ' command; do
printf '%s\n' "$command"
done >> /app/input.buffer
Dockerfile
COPY interactive_console /usr/bin
CMD interactive_console
我目前正在为 运行 Minecraft Spigot 服务器构建一个 docker 项目。
为了实现这一点,我需要能够 运行 在 运行 宁 shell(使用 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
代码可以找到here
有人知道如何添加直接输入命令的功能吗?
用例一:用户可以 运行 使用 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(看用例"two",基本一样)
您可以制作一个脚本,其行为类似于迷你 shell,从标准输入读取并写入 /app/input.buffer
。将它设置为容器的 CMD
以便它默认运行。将它放在与 Dockerfile
相同的目录中,并确保它是可执行的。
interactive_console
#!/bin/sh
while IFS= read -rp '$ ' command; do
printf '%s\n' "$command"
done >> /app/input.buffer
Dockerfile
COPY interactive_console /usr/bin
CMD interactive_console