docker - 在 docker 容器中输入的 Shell 脚本
问题描述
我有一个server-setup.sh
在 docker 容器中运行的 .sh 脚本 () 提出问题并等待用户在控制台中写一些东西。我使用read
将用户输入写入变量的函数,然后使用一些“if”,它根据用户输入执行某些操作。
当容器启动时,它会entrypoint.sh
立即调用server-setup.sh
. 脚本启动,但输入一个空的输入,所以脚本退出。
server-setup.sh
echo "Select server type\n "
echo " 1) Vanilla\n 2) Paper\n 3) Forge\n 4) Mohist\n 5) Quit"
read server_type_num
if [ "$server_type_num" = "1" ]; then
server_type="Vanilla"
server_ver_select
elif [ "$server_type_num" = "2" ]; then
server_type="PaperMC"
server_ver_select
elif [ "$server_type_num" = "3" ]; then
server_type="Forge"
#server_ver_select
echo "Working on..."
elif [ "$server_type_num" = "4" ]; then
server_type="Mohist"
#server_ver_select
echo "Working on..."
elif [ "$server_type_num" = "5" ]; then
echo "Bye!"
return
else
echo "Invalid option"
echo "Option: $server_type_num"
return
fi
结果:
Select server type
1) Vanilla
2) Paper
3) Forge
4) Mohist
5) Quit
Invalid option
Option:
版本:
Docker version: 20.10.6
Docker is running on: Ubuntu Server (Focal 20.04 LTS)
Container image: Ubuntu
解决方案
虽然在 a 中有一个交互式入口点不是一个好习惯,Dockerfile
但没有提示您输入的原因是因为 docker 不会在交互式模式下运行,除非您使用-it
标志请求它。
$ docker run --help
# ...
-t, --tty Allocate a pseudo-TTY
-i, --interactive Keep STDIN open even if not attached
因此,您可以运行:
$ docker run --rm -it your_image ...
更好的选择是使用环境变量。例如:
#!/usr/bin/env sh
server_ver_select() {
echo "Server is $server_type"
}
server_type="${SERVER_TYPE:-Vanilla}"
server_ver_select
并运行:
$ docker run --rm -it -e SERVER_TYPE=PaperMC temp
推荐阅读
- javascript - 自定义函数子字符串 Apps 脚本
- javascript - 循环遍历包含 Array 作为值的对象并组合所有值,对它们进行排序,重新索引和更新值
- sql - 用于连接多对多表的 Linq 查询
- macos - 错误 无法构建 iOS 项目。我们运行了“xcodebuild”命令,但它以错误代码 65 退出。在 Mac 上
- linux-device-driver - 在Linux中如何在另一个驱动中使用一个驱动
- css - 背景颜色输入CSS特异性问题
- bash - 为什么我的算术条件被评估为真?
- php - Mysql 按日期排序,格式为月份(字符串)。日(数),年(数)
- python - 使用 any() 函数在列表中查找值的索引,该值也在字符串内部
- format - 尝试使用 f-string 格式化和对齐表格中的数字